如何从以毫秒为单位的长 Epoch 时间创建 Java 8 LocalDate?

新手上路,请多包涵

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

使用旧式 Java API,我只需从它构造一个 Date

 Date myDate = new Date(startDateLong)

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

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

原文由 Vihung 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 749
2 个回答

如果您有自纪元以来的毫秒数,并希望使用当前本地时区将它们转换为本地日期,您可以使用 Instant.ofEpochMilli(long epochMilli)

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

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

此外,请记住 LocalDatejava.util.Date 不同,它真正代表的是日期,而不是日期和时间。

否则,您可以使用 LocalDateTime

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

原文由 Holger 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

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

原文由 Meno Hochschild 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题