日期&日期格式&日历

在项目开发工作中,日期是商业逻辑计算一个要害的部分.

因此,开发者必须能够计算未来的日期, 定制日期的显示格式, 并将文本数据解析成日期对象.

而在Java中,Calendar(日历),Date(日期), 和DateFormat(日期格式)组成了Java标准的一个基本但是非常重要的部分.

因此在进行日期的处理和分析常用到下面几个类:

 

1.日期 

父类:java.util.Date

子类:java.sql.Date,    java.sql.Time,   java.sql.Timestamp

 

   (1) 先来说说它们之间的关系,java.util.Date这个类是java.sql.Date,  java.sql.Time,  java.slq.Timestamp

          这三个类的父类。这三个类对java.util.Date类进行了包装。

 

   (2) java.util.Date

          Date类可以用于获得特定的瞬间,精确到毫秒的日期值;

         

          在 JDK 1.1 之前,类 Date 有两个其他的函数。它允许把日期解释为年、月、日、小时、分钟和秒值。

             它也允许格式化和解析日期字符串。不过,这些函数的 API 不易于实现国际化。

              从 JDK 1.1 开始,应该使用 Calendar 类实现日期和时间字段之间转换,

                                              使用 DateFormat 类来格式化和解析日期字符串。

             Date 中的相应方法已废弃。尽管Date大部分方法已经过时,但Date类并没有过时,我会在另外的文章介绍

             Date的具体使用,当然也可以查看API文档。             

 

   (3) java.sql.Date类

         一个包装了毫秒值的瘦包装器 (thin wrapper),它允许 JDBC 将毫秒值标识为 SQL DATE 值。

         即主要用于将 JDBC 日期转义形式的字符串转换成 Date 值,其它大部分方法已经过时。

        

         隐藏了java.util.Date类 的时间有关的方法(形如:hh:mm:ss),因此,不可以通过这个类访问时间有关的信息,

           比如:

              如果你通过sqlDate.getHour()方法去访问小时信息,此方法会抛出一个IllegalArgumentException 异常。

              这是因为java.sql.Date在继承java.util.Date类的时候对父类进行了重写,禁用了时间访问的方法。

              之所以这么处理,是为了和数据库的Date数据类型相匹配,数据库的Date数据类行只是保存日期有关的字段。

 

   (4) Java.sql.Time类

          隐藏了java.util.Date的日期有关的字段(形如:yyyy-MM-dd),因此,不能通过这个类访问日期有关的信息

            比如: 

          如果你通过sqlTime.getYear()方法去获取年有关的信息,此方法会抛出一个IllegalArgumentException 异常。

                这是因为java.sql.Time在继承java.util.Date类的时候对父类进行了重写,禁用了日期访问的方法。

                之所以这么处理,是为了和数据库的Time数据类型相匹配,数据库的Time数据类行只是保存时间有关的字段。

 

   (5) Java.sql.Timestamp类

           则对java.util.Date这个类进行了扩充,它在java.util.Date类的基础上增加了毫秒的时间访问控制,因此,

           你可以通过getNanos()方法去获取时间的毫微秒数

                      (注意此处获取的时间是以毫微秒为单位的,1秒等于十亿毫微秒),

           同样的,这也是为了和数据库中的Timestamp数据类型进行匹配。

 

2.日历 

父类:java.util.Calendar (抽象类)

子类:java.util.GregorianCalendar

 

  (1) Java.util.Calendar类

           是java.util.Date类的一个更加深入,更加全面的替代。Java.util.Calendar类支持java.util.Date的所有功能,

              此外,Calendar还引入了多语言,多区域的特性,可以根据需要获取不同区域,不同时区的时间,

              Calendar还增加了比Date更加方便和快捷的许多操作,

              如获取一年当中的第几个星期,各个月的天数等便捷的方法。

 

  (2)java.util.GregorianCalendar 类

            GregorianCalendarCalendar 的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。

 

  (3)Java.util.Calendar区别与java.util.Date的几个地方也需要注意一下:

          首先,  Calendar增加了毫秒的时间段,通过它可以获取时间点的毫秒值,而java.util.Date只是精确到秒。

 

          其次,  Calendar过去年的时候是当前年份比如:2010,而Date获取年份的时获取到的是当前年份-1900的

                       一个值(2010-1900=110,因此,你调用getYear后过去的值就是110)。

 

          最后,  Calendar是一个抽象类,之所以能够实例化,是因为此处的Calendar充当了一个类似于工厂的作用,

                       在getInstance方法中实例化了Calendar子类GregorianCalendar,并把它返回给客户使用。

 

 

3.日期格式

父类:java.text.DateFormat (抽象类)

子类:java.text.SimpleDateFormat 

 

 

 

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值