zoukankan      html  css  js  c++  java
  • JavaSE中日期处理

    一、java中日期类之间的关系:

    JavaSE中日期处理

    其中:
    1):java.sql.Date、java.sql.Time和java.sql.Timestamp这三个类是专门和数据库打交道的,它们都是java.util.Date的子类。
    java.sql.Date继承了java.util.Date的日期部分(年月日)。
    java.sql.Time继承了java.util.Date的时间部分(时分秒)。
    java.sql.Timestamp全部继承了java.util.Date(年月日时分秒毫秒)。
    2):对于日期的格式化我们使用java.text.DateFormat,我们最常用的是使用 它的子类java.text.simpleDateFormat。
    3):如果想知道已知的Date是一年中的第一天、一月中的第几日、一周中的星期几等等。即这是我们要知道已知Date的日历。我们可以使 用java.util.Caleadar类处理。对已处理各种各样时区的日历,我们需要使用java.util.GregorianCalendar类 (格林威治日历)。
    4):如果我们已经知道了当前时区的Calendar,想知道其他时区的Calendar,这时我们就需要java.util.Timezone类。即使用Calendar类的
    setTimeZone(TimeZone value) 方法。

    二、从数据库中获取日期

    1、将从数据库中得到日期格式化为自定义的日期格式

       //此处从数据库得到的date是java.sql.Date类型(保存了日期信息
       Date sendDate = rs.getDate("send_date");
       SimpleDateFormat sdf = new   SimpleDateFormat("yyyy年MM月dd日");
       System.out.println(sdf.format(sendDate));

     
     //结果样式为:2012年09月26日
    ######################################################

     如果我们想获取时间信息,将上面的

    new   SimpleDateFormat("yyyy年MM月dd日")改为:
    new SimpleDateFormat("HH小时mm分钟ss秒")
    那么结果样式始终为:00小时00分钟00秒
    这是因为
    java.sql.Date类型只保存了日期的信息(年月日)没有保存时间信息(时分秒)
     2.从数据库中得到日期中获取具体的年或月或日
           //此处从数据库得到的date是java.sql.Date类型
           Date sendDate = rs.getDate("send_date");
           //得到当前时间的日历
            Calendar cal = Calendar.getInstance();
           //将从数据库中得到的date转为Calendar,setTime(arg)方法中的参数是java.util.Date类型,而java.sql.Date是java.util.Date的子类

           cal.setTime(sendDate);
           //得到具体的月(这里的月是从0开始的)
           int month = cal.get(Calendar.MONTH);
           System.out.println(month+1);



     

    3、将从数据库中得到日期格式化为自定义的时间格式
    //此处从数据库得到的date是java.sql.Timestamp类型(日期和时间信息都保存了
                   Timestamp sendDate = rs.getTimestamp("send_date");
                   SimpleDateFormat sdf = new SimpleDateFormat("HH小时mm分钟ss秒");
                   System.out.println(sdf.format(sendDate));

    --------------------------------------------------------
    或者
    //此处从数据库得到的date是java.sql.Time类型(只保存了时间信息
                   Time sendDate = rs.getTime("send_date");
                   SimpleDateFormat sdf = new SimpleDateFormat("HH小时mm分钟ss秒");
                   System.out.println(sdf.format(sendDate));


    //结果样式为:08小时48分钟37秒
     4、得到当前系统的日期时间
       a:将毫秒数换转成日期类型
       Long time=System.currentTimeMillis();
       Date dNow=new Date(time);
      System.out.println("日期类型:"+dNow);
    //当前时间与协调世界时 1970 年 1 月 1 日午夜之间的时间差(以毫秒为单位测量)。通常用在计算程序执行了多长时间。
     
       b:
       java.util.Date date = new java.util.Date();
       //将当前date转为Calendar
        cal.setTime(
    date);
       //得到具体的月(注意:月是从0开始计算的
       int month = cal.get(Calendar.MONTH);
    //Date是java.util.Date包下的,包含了日期信息和时间信息,由于此类中很多方法都过时了,可以先将Date类型转换为Calendar类型,在获取日期时间信息。

      c:
       Calendar cal = Calendar.getInstance();
    //此calendar是java.util.Calendar包下的,它拥有很多方法可以获取日期和时间信息。

      d:取得指定时区的日期时间
       Calendar japanTime= new    GregorianCalendar(TimeZone.getTimeZone("Japan"));        System.out.println(japanTime.get(Calendar.HOUR_OF_DAY));
    //结果是:22
    说明:TimeZone.getTimeZone("Japan")中Japan是TimeZone的ID,如果你想知道所有可用的TimeZone的ID,可以使用下面的语句获取:
     for(String str :TimeZone.getAvailableIDs())
                System.out.println(str);
    三、将从页面取得的字符串日期转换为日期类型(保存到数据库)
         1、 //假设strDate 是从页面得到的日期
           String strDate = "2013-06-13 08:16:30";
           Timestamp tm = Timestamp.valueOf(strDate);

           System.out.println(tm);//结果是:2013-06-13 08:16:30.0
        同理:java.sql.Date和java.sql.Time都有valueOf(String arg)方法
         2、
            //假设strDate 是从页面得到的日期
            String strDate = "2013-06-13 08:16:30";
            SimpleDateFormat sdf = new    SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            java.util.Date date = sdf.parse(strDate);
            System.out.println(date);

    //结果是:Thu Jun 13 08:16:30 CST 2013

    时间格式语法:

    使用一个 time pattern 字符串指定时间格式。 在这种方式下,所有的 ASCII 字母被保留为模式字母,定义如下:

     符号     含义                   表示                示例
    ------   -------               ------------        -------
    G        年代标志符              (Text)              AD
    y        年                      (Number)            1996
    M        月                    (Text & Number)     July & 07
    d        日                      (Number)            10
    h        时 在上午或下午 (1~12)  (Number)            12
    H        时 在一天中 (0~23)      (Number)            0
    m        分                      (Number)            30
    s        秒                      (Number)            55
    S        毫秒                    (Number)            978
    E        星期                    (Text)              Tuesday
    D        一年中的第几天          (Number)            189
    F        一月中第几个星期几      (Number)      2(2nd Wed inJuly)
    w        一年中第几个星期        (Number)            27
    W        一月中第几个星期        (Number)            2
    a        上午 / 下午 标记符      (Text)              PM
    k        时 在一天中 (1~24)      (Number)            24
    K        时 在上午或下午 (0~11)  (Number)            0
    z        时区                  (Text)    Pacific Standard Time
    '        文本转义符              (Delimiter)
    ''       单引号                  (Literal)           '

    模式字母的数目决定了格式。

    下面使一些实例:


    格式化模式                             结果
    --------------                         -------
    "yyyy.MM.dd G 'at' hh:mm:ss z"    ->>  1996.07.10 AD at 15:08:56 PDT
    "EEE, MMM d, ''yy"                ->>  Wed, July 10, '96
    "h:mm a"                          ->>  12:08 PM
    "hh 'o''clock' a,zzzz"->>12 o'clock PM,Pacific Daylight Time
    "K:mm a, z"                       ->>  0:00 PM, PST
    "yyyyy.MMMMM.dd GGG hh:mm aaa"   ->> 1996.July.10 AD 12:08 PM

    更多精彩请参阅:Java日期格式化及其使用例子收集
  • 相关阅读:
    mysql主从复制读写分离的配置方法详解
    JS如何给ul下的所有li绑定点击事件,点击使其弹出下标和内容
    C#中的参数和调用方式(可选参数、具名参数、可空参数)
    关于HTML5的data-*自定义属性的总结
    在Java代码中解析html,获取其中的值方法
    Java面向对象之成员隐藏与属性封装操作示例
    《设计原本》读书笔记03
    java双重检查锁定的实现代码
    微信公众号开发之设置自定义菜单实例代码【java版】
    深入学习Redis(3):主从复制
  • 原文地址:https://www.cnblogs.com/kabi/p/5182831.html
Copyright © 2011-2022 走看看