如何将Joda LocalDate转换为java.util.Date?

65
5个回答

80

JodaTime

要将JodaTime的org.joda.time.LocalDate转换为java.util.Date,请执行以下操作:

Date date = localDate.toDateTimeAtStartOfDay().toDate();

要将JodaTime的org.joda.time.LocalDateTime转换为java.util.Date,请执行以下操作:

Date date = localDateTime.toDate();

JavaTime

要将 Java8 的 java.time.LocalDate 转换为 java.util.Date,请执行以下操作:

Date date = Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());

要将Java8的java.time.LocalDateTime转换为java.util.Date,请执行以下操作:

Date date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());

你可能会想要使用 LocalDateTime#toInstant(ZoneOffset) 来缩短它,但是没有直接的 API 来获取系统默认的区域偏移量。

要将 Java8 的 java.time.ZonedDateTime 转换为 java.util.Date,请执行以下操作:

Date date = Date.from(zonedDateTime.toInstant());

1
为了代码的安全性,请考虑传递一个时区,因为它将使用默认时区。 - Yann Moisan
如何实现此代码 --> new LocalDateTime(Long.MAX_VALUE).toDateTimeAtStartOfDay().toDate,会导致long溢出问题。 - Gowrav
在这个问题上遇到了一个非常具体的问题。我们的服务器位于马耳他,我现在正在处理一个1973-03-31出生的人的案例。当使用toDateTimeAtStartOfDay()进行转换时,它变成了1973-03-31 00:00:00.000,这是马耳他从未存在过的一刻,因为夏令时的缘故。我可以只添加中午时间,问题就解决了,但我想知道是否有更简洁的方法来转换这个日期,因为我实际上从未使用过时间,只使用日期。 - Sander

10

自2.0版本以来,LocalDate拥有了一个toDate()方法。

Date date = localDate.toDate();
如果使用版本1.5-2.0,请使用:
Date date = localDate.toDateTimeAtStartOfDay().toDate();

在旧版本中,您只剩下:

Date date = localDate.toDateMidnight().toDate();

9
您需要设置时区。
LocalDate date = ...

Date utilDate = date.toDateTimeAtStartOfDay( timeZone ).toDate( );

6
也许是这个吗?
localDate.toDateTimeAtCurrentTime().toDate();

-3

试试这个。

new Date(localDate.toEpochDay())


3
虽然toEpochDay()返回一个长整型,而Date构造函数接受一个长整型,但它们并不相同。纪元日计数是递增的天数计数,其中第0天是1970-01-01(ISO)。然而构造函数接受自“纪元”以来经过的指定毫秒数。toEpochDay()给出了天数,构造函数接受毫秒数。 - Kevin Sadler

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