如何将Joda-Time DateTime转换为java.util.Date,反之亦然?


Answers:


106

要将JavaDate转换为JodaDateTime:-

Date date = new Date();
DateTime dateTime = new DateTime(date);

反之亦然:-

Date dateNew = dateTime.toDate();

使用TimeZone,如果需要:-

DateTime dateTimeNew = new DateTime(date.getTime(), timeZone);
Date dateTimeZone = dateTime.toDateTimeAtStartOfDay(timeZone).toDate();

9
您的转换DateTime使用系统默认时区-您应该明确地说。而且您的转换确实使用时区,因此需要一天的开始,这是IMO的奇怪选择。一个DateTime已经知道的时区,所以它的奇怪,要改变它-它使更多的意义转换时指定区域 Date DateTime
乔恩·斯基特

1
java.utiL.Date实际上不了解java.util.TimeZone。因此,TimeZone如果您也需要它,则必须获得一个单独的变量,例如:TimeZone zone = dateTime.getZone().toTimeZone();
bowmore

6

您尚未指定您感兴趣的Joda Time中的哪种类型,但是:

Instant instant = ...;
Date date = instant.toDate();
instant = new Instant(date);
// Or...
instant = new Instant(date.getTime());

既与时区Date也不Instant相关,因此无需在此处指定一个。

LocalDateTime/ LocalDate/转换LocalTimeDate(或反之亦然)是没有意义的,因为这取决于所应用的时区。

随着DateTime你可以转换一个Date不指定时区,但是要转换DateDateTime你应该指定时区,否则将使用系统默认的时区。(如果您确实需要,我会明确指定它,以明确表明这是一个有意的选择。)

例如:

DateTimeZone zone = DateTimeZone.forID("Europe/London");
Date date = ...;
DateTime dateTime = new DateTime(date.getTime(), zone);

LocalTimejava.util.Date测试进行交互时,确实有助于简化代码。谢谢。
亚历山大·马丁斯

1

要将Java日期转换为日期的Joda时间:
要将日期转换为DateTime,需要指定时区。
要将java.util Date转换为Joda Time of Date,只需要将java.util Date和时区传递给Joda Time of Date的构造函数。

java.util.Date date = new java.util.Date(System.currentTimeMillis());
DateTimeZone dtz = DateTimeZone.getDefault();// Gets the default time zone.
DateTime dateTime = new DateTime(date.getTime(), dtz);

要将Joda日期时间转换为Java日期:
相反,Joda DateTime有一个方法toDate()将返回java.util Date。

DateTime jodaDate = new DateTime();
java.util.Date date = jodaDate.toDate();

有关更多详细信息,请访问此处

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.