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

How can I create a Java 8 LocalDate from a long Epoch time in Milliseconds?

我有一个外部API返回我的日期为longs,表示为自epoch以来的毫秒数。

使用旧的Java API,我只需从中构造一个EDCOX1,1个

1
Date myDate = new Date(startDateLong)

在Java 8的EDCOX1×2 /EDCOX1×3类中,等价的是什么?

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


如果您有自epoch以来的毫秒数,并且希望使用当前本地时区将其转换为本地日期,则可以使用

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

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

此外,请记住,与java.util.Date不同,LocalDate实际上代表的是日期,而不是日期和时间。

否则,您可以使用LocalDateTime

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


你可以从即时开始。ofepochmilli(long):

1
2
3
4
LocalDate date =
  Instant.ofEpochMilli(startDateLong)
  .atZone(ZoneId.systemDefault())
  .toLocalDate();


我想我有更好的答案。

1
new Timestamp(longEpochTime).toLocalDateTime();


撇开时区和其他东西不谈,一个非常简单的替代方法是new Date(startDateLong),可以是LocalDate.ofEpochDay(startDateLong / 86400000L)


在特定情况下,如果您的epoch秒时间戳来自SQL或以某种方式与SQL相关,则可以这样获得它:

1
2
3
long startDateLong = <...>

LocalDate theDate = new java.sql.Date(startDateLong).toLocalDate();