问题
我有一个外部API返回我的日期为long
s,表示自Epoch以来的毫秒数。
使用旧式Java API,我只需用它构造一个Date
Date myDate = new Date(startDateLong)
Java 8的LocalDate
/LocalDateTime
类中的等价物是什么?
我有兴趣将长度所代表的时间点转换为当前本地时区的aLocalDate
。
#1 热门回答(200 赞)
如果你有自Epoch以来的毫秒数并希望使用当前本地时区将它们转换为本地日期,则可以使用
LocalDate date =
Instant.ofEpochMilli(longValue).atZone(ZoneId.systemDefault()).toLocalDate();
但请记住,即使系统的默认时区可能会发生变化,因此相同的long
值可能会在后续运行中产生不同的结果,即使在同一台机器上也是如此。
此外,请记住,与java.util.Date
不同,LocalDate
确实代表了日期,而不是日期和时间。
否则,你可以使用aLocalDateTime
:
LocalDateTime date =
LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue), ZoneId.systemDefault());
#2 热门回答(19 赞)
你可以从Instant.ofEpochMilli(long)开始:
LocalDate date =
Instant.ofEpochMilli(startDateLong)
.atZone(ZoneId.systemDefault())
.toLocalDate();
#3 热门回答(4 赞)
我想我有更好的答案。
new Timestamp(longEpochTime).toLocalDateTime();