我如何从一个长时间的毫秒级创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)