Joda-Time 故事3 DateTime 和JDK的协作
一、背景
jdk8中java.time包已经引进了joda-time,新应用的日期操作逻辑应该更多会使用新的api。但是传统的java.util日期包在很多框架内还是广泛使用的。比如mybatis中数据库timestamp类型映射的java类型就是java.util.Date。为啥不是java.sql.Date,感觉这个类感觉一点存在感都没有。本章介绍一下Joda-Time与java.util日期api的互转。
二、核心对象
2.1 DateTime
前面介绍过,出门左转可以看到
2.2 Date
不用介绍了,都用过,使用也很简单,当前日期 new Date(),时间戳 getTime()
2.3 Calendar
用的少的人,比如我提到这个类基本上就得百度了。
援引jdk doc,地址:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh
Calendar
类是一个抽象类,它为特定瞬间与一组诸如 YEAR
、MONTH
、DAY_OF_MONTH
、HOUR
等 日历字段
之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
2.4 GregorianCalendar
同上,不百度不会用。
援引jdk doc,地址:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh
GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。
三、使用案例
DATETIME类有一个构造函数,它把一个对象作为输入。特别的是,这个构造函数可以传递JDK Date、JDK Calendar 或JDK GregorianCalendar(它还接受ISO8601格式化的String或表示毫秒的long)。这是与JDK的互操作性的一部分。与JDK互操作性的另一部分是通过DATETIME返回JDK对象的方法进行的。
因此,JoDaDeTime/JDK日期之间的转换案例如下:
3.1 DateTime与Date互转
// from Joda to JDK
DateTime dt = new DateTime();
Date jdkDate = dt.toDate();
// from JDK to Joda
dt = new DateTime(jdkDate);
3.2 DateTime与Calendar互转
// from Joda to JDK
DateTime dt = new DateTime();
Calendar jdkCal = dt.toCalendar(Locale.CHINESE);
// from JDK to Joda
dt = new DateTime(jdkCal);
3.3 DateTime与GregorianCalendar互转
// from Joda to JDK
DateTime dt = new DateTime();
GregorianCalendar jdkGCal = dt.toGregorianCalendar();
// from JDK to Joda
dt = new DateTime(jdkGCal);