如何从很长的纪元时间(以毫秒为单位)创建 Java 8 LocalDate?

2022-08-31 05:11:35

我有一个外部API,它将日期返回为s,表示为自Epoch开始以来的毫秒。long

使用旧式Java API,我会简单地从它构建一个Date

Date myDate = new Date(startDateLong)

Java 8 的 / 类中的等效项是什么?LocalDateLocalDateTime

我有兴趣将 所代表的时间点转换为我当前本地时区的 a。longLocalDate


答案 1

如果您有自纪元以来的毫秒,并且想要使用当前本地时区将它们转换为本地日期,则可以使用

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

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

此外,请记住,与 不同,它实际上表示一个日期,而不是日期和时间。LocalDatejava.util.Date

否则,您可以使用 :LocalDateTime

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

答案 2

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

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