Sud*_*hul 101

要将JavaDate转换为JodaDateTime: -

Date date = new Date();
DateTime dateTime = new DateTime(date);
Run Code Online (Sandbox Code Playgroud)

反之亦然: -

Date dateNew = dateTime.toDate();
Run Code Online (Sandbox Code Playgroud)

有了TimeZone,如果需要的话: -

DateTime dateTimeNew = new DateTime(date.getTime(), timeZone);
Date dateTimeZone = dateTime.toDateTimeAtStartOfDay(timeZone).toDate();
Run Code Online (Sandbox Code Playgroud)

  • 您转换为"DateTime"使用系统默认时区 - 您应该明确说明.**使用时区的转换需要一天的开始,这是一个奇怪的选择IMO."DateTime"已经*知道*时区,所以想要改变它是很奇怪的 - 在将*从*`Date`*转换为*`DateTime`时指定区域更有意义. (9认同)
  • 感谢大家 (2认同)

Jon*_*eet 6

您没有在Joda Time中指定您感兴趣的类型,但是:

Instant instant = ...;
Date date = instant.toDate();
instant = new Instant(date);
// Or...
instant = new Instant(date.getTime());
Run Code Online (Sandbox Code Playgroud)

Date既没Instant有时区也没有时区,所以没有必要在这里指定一个.

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

随着DateTime你可以转换一个Date不指定时区,但是要转换DateDateTime你应该指定时区,否则将使用系统默认的时区.(如果你真的想要那个,我会明确指出它,以明确它是一个慎重的选择.)

例如:

DateTimeZone zone = DateTimeZone.forID("Europe/London");
Date date = ...;
DateTime dateTime = new DateTime(date.getTime(), zone);
Run Code Online (Sandbox Code Playgroud)