是的,使用 Joda-Time
一定要在 Java 8 中使用 Joda-Time 或 java.time package(受 Joda-Time 启发)。旧的 java.util.Date 和 java.util.Calendar 类出了名的麻烦、混乱和过时。
另外,请阅读 UTC 和 ISO 8601 上的维基百科页面。
是的,将日期传递给 Joda-Time 构造函数
➔ 确实,您可以将java.util.Date 对象传递给Joda-Time DateTime 对象的constructor。
API 文档有点混乱,因为这显然属于采用java.lang.Object 实例的构造函数的包罗万象的版本。如果该对象实际上是一个java.util.Date,Joda-Time 将提取其毫秒计数-epoch 并将该数字用作自己的数字。
时区
DateTime 构造函数还分配了一个时区。默认情况下,会分配 JVM 当前的默认时区。我建议您始终传递所需的时区,而不是隐式依赖默认时区,即使这意味着调用 getDefault。
示例代码
这里是 Joda-Time 2.5 中的一些示例代码,展示了如何将 java.util.Date 传递给 Joda-Time 构造函数。
java.util.Date date = new java.util.Date();
DateTimeZone zone = DateTimeZone.forID( "America/Montreal" );
DateTime dateTimeMontreal = new DateTime( date , zone );
DateTime dateTimeUtc = dateTimeMontreal.withZone( DateTimeZone.UTC ); // Adjust to another time zone.
转储到控制台。
System.out.println( "date: " + date ); // Misleading output. A j.u.Date is in UTC but its toString method applies JVM’s current default time zone.
System.out.println( "dateTimeMontreal: " + dateTimeMontreal );
System.out.println( "dateTimeUtc: " + dateTimeUtc );
运行时。
date: Sat Oct 18 18:54:55 PDT 2014
dateTimeMontreal: 2014-10-18T21:54:55.740-04:00
dateTimeUtc: 2014-10-19T01:54:55.740Z
如问题所示,要从 DateTime 转到 java.util.Date,请调用 toDate。
java.util.Date date = dateTimeMontreal.toDate();