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

78

这个可能吗?如果可以,那么我如何从Joda-Time转换到Date,反之亦然?


你看过Joda的DateTime构造函数吗?你认为哪一个比较适合? - vikingsteve
3个回答

117

Java Date转换为Joda DateTime

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 的代码使用系统默认时区 - 您应该明确说明。而您使用时间区域的转换采用了一天的开始时间,这是我认为很奇怪的选择。DateTime 已经 知道 时区,所以想要更改它是很奇怪的 - 在从 Date 转换 DateTime 时指定区域更有意义。 - Jon Skeet
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());

DateInstant都与时区无关,因此这里没有必要指定时区。

LocalDateTime/LocalDate/LocalTime转换为Date(或反过来)是没有意义的,因为这将取决于所应用的时区。

使用DateTime,您可以在不指定时区的情况下将其转换为Date,但要从Date转换为DateTime,应该指定时区,否则它将使用系统默认时区。(如果你真的想要那样做,我会明确指定它以表明这是一个故意的选择。)

例如:

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

LocalTime 在与 java.util.Date 交互和进行测试时,真的有助于简化代码。谢谢。 - Alexandre Martins

1

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

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 Time的日期转换为Java日期:
反过来,Joda DateTime有一个toDate()方法,它会返回java.util Date。

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

更多详情请访问此处

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接