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();
DateTime
的代码使用系统默认时区 - 您应该明确说明。而您使用时间区域的转换采用了一天的开始时间,这是我认为很奇怪的选择。DateTime
已经 知道 时区,所以想要更改它是很奇怪的 - 在从 Date
转换 到 DateTime
时指定区域更有意义。 - Jon Skeetjava.util.Date
实际上并不知道 java.util.TimeZone
。因此,如果您需要它,您必须在单独的变量中获取 TimeZone
,就像这样:TimeZone zone = dateTime.getZone().toTimeZone();
- bowmore您没有指定您感兴趣的Joda Time中的哪种类型,但是:
Instant instant = ...;
Date date = instant.toDate();
instant = new Instant(date);
// Or...
instant = new Instant(date.getTime());
Date
和Instant
都与时区无关,因此这里没有必要指定时区。
将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将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();