我如何从一个长时间的毫秒级创build一个Java 8 LocalDate?

我有一个外部的API返回我的date为s,表示为Epoch以来的毫秒数。

使用旧式的Java API,我只需简单地用它构造一个Date

Date myDate = new Date(startDateLong)

Java 8的LocalDate / LocalDateTime类中的等价物是什么?

我有兴趣将long表示的时间点转换为当前本地时区中的LocalDate

如果您有从纪元以来的毫秒数,并且希望使用当前本地时区将它们转换为本地date,则可以使用

 LocalDate date = Instant.ofEpochMilli(longValue).atZone(ZoneId.systemDefault()).toLocalDate(); 

但是请记住,即使系统的默认时区可能会改变,因此,即使在同一台机器上,相同的long值也可能在后续运行中产生不同的结果。

此外,请记住,与java.util.Date不同, LocalDate确实代表date,而不是date和时间。

否则,您可以使用LocalDateTime

 LocalDateTime date = LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue), ZoneId.systemDefault()); 

你可以从Instant.ofEpochMilli(long)开始 :

 LocalDate date = Instant.ofEpochMilli(startDateLong) .atZone(ZoneId.systemDefault()) .toLocalDate(); 

除了时区和东西之外, new Date(startDateLong)一个非常简单的替代方法可能是LocalDate.ofEpochDay(startDateLong / 86400000L)