读书人

日期amp;amp;日期格式amp;amp;台历

发布时间: 2012-10-24 14:15:58 作者: rapoo

日期&日期格式&日历
在项目开发工作中,日期是商业逻辑计算一个要害的部分.
因此,开发者必须能够计算未来的日期, 定制日期的显示格式, 并将文本数据解析成日期对象.
而在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 之前,类 <code>date</code> 有两个其他的函数。它允许把日期解释为年、月、日、小时、分钟和秒值。
?????????????它也允许格式化和解析日期字符串。不过,这些函数的 api 不易于实现国际化。
????????????? 从 jdk?1.1 开始,应该使用 <code>calendar</code> 类实现日期和时间字段之间转换,
????????????????????????????????????????????? 使用 <code>dateformat</code> 类来格式化和解析日期字符串。
???????????? <code>date</code> 中的相应方法已废弃。尽管date大部分方法已经过时,但date类并没有过时,我会在另外的文章介绍
???????????? date的具体使用,当然也可以查看api文档。?????????????
?
???(3) java.sql.date类
???????? 一个包装了毫秒值的瘦包装器 (thin wrapper),它允许 jdbc 将毫秒值标识为 sql <code>date</code> 值。
???????? 即主要用于将 jdbc 日期转义形式的字符串转换成 <code>date</code> 值,其它大部分方法已经过时。
????????
?????????隐藏了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 类
??????????? <span style="font-family: courier new;">gregoriancalendar</span> 是 <code>calendar</code> 的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。
?
??(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?
?
?
?
??

读书人网 >编程

热点推荐