Answers:
如果您从大纪元起有毫秒数,并且想要使用当前本地时区将其转换为本地日期,则可以使用
LocalDate date =
Instant.ofEpochMilli(longValue).atZone(ZoneId.systemDefault()).toLocalDate();
但请记住,即使系统的默认时区也可能会更改,因此long
即使在同一台机器上,相同的值也可能在以后的运行中产生不同的结果。
此外,请记住LocalDate
,与不同java.util.Date
,真正表示的是日期,而不是日期和时间。
否则,您可以使用LocalDateTime
:
LocalDateTime date =
LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue), ZoneId.systemDefault());
LocalDateTime.ofEpochSecond(…)
需要实际值ZoneOffset
,但 ZoneId.systemDefault()
返回ZoneId
。A ZoneId
可以映射到不同的偏移量,具体取决于您指的时间点。这就是LocalDateTime.ofInstant
您要做的,ZoneId
根据提供的转换指定的内容Instant
。
LocalDate
or 的语义有关LocalDateTime
。您可以指定所需的任何时区,只要它与这些结果对象的后续使用一致即可。想想当您处理由不同方法创建的多个对象时会发生什么。当地日期或日期时间的典型用例包含系统默认时区,例如LocalDateTime.now()
≈ LocalDateTime.ofInstant(Instant.ofEpochMilli(System.currentTimeMillis()), ZoneId.systemDefault())
…
您可以从Instant.ofEpochMilli(long)开始:
LocalDate date =
Instant.ofEpochMilli(startDateLong)
.atZone(ZoneId.systemDefault())
.toLocalDate();
我想我有一个更好的答案。
new Timestamp(longEpochTime).toLocalDateTime();
Timestamp
课程的设计不佳,而且已经过时了。您的代码将使用JVM的时区设置,但是由于您的程序的另一部分或运行在同一JVM中的另一个程序可以更改此设置,因此我们无法确定它是什么。
除了时区和其他东西,一个非常简单的替代方法new Date(startDateLong)
可能是LocalDate.ofEpochDay(startDateLong / 86400000L)
java.time
没有DateTimeConstants
乔达那样。
java.util.concurrent.TimeUnit.MILLISECONDS.toDays(startDateLong)
用您的long值替换now.getTime()。
//GET UTC time for current date
Date now= new Date();
//LocalDateTime utcDateTimeForCurrentDateTime = Instant.ofEpochMilli(now.getTime()).atZone(ZoneId.of("UTC")).toLocalDateTime();
LocalDate localDate = Instant.ofEpochMilli(now.getTime()).atZone(ZoneId.of("UTC")).toLocalDate();
DateTimeFormatter dTF2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
System.out.println(" formats as " + dTF2.format(utcDateTimeForCurrentDateTime));
在特定情况下,纪元时间戳记时间戳来自SQL或与SQL有某种关系,您可以像这样获得它:
long startDateLong = <...>
LocalDate theDate = new java.sql.Date(startDateLong).toLocalDate();
LocalDate
从epoch-millis
”,我展示了如何使用java.sql.Date
速记。这种方法在已经以某种能力处理JDBC的代码中很有意义,并且工作得很好。如果您仍然不确定,请说明它与最初的问题无关。
java.sql.Date
方法在代码方面是最短的可用方法之一,我会说这不是那么有用虽则去Instant
了所有的中间时间对象时,最终的结果是一样的。
java.util.Date
从来都不是真正的约会LocalDate
-也是时间的瞬间。