【发布时间】:2019-02-12 08:36:57
【问题描述】:
我有一个应用程序,我使用自 Epoch 以来的毫秒数转换为 LocalDateTime 并返回,该应用程序在 Java 8 上运行良好,但我尝试更新到 Java 10 并发现以下问题
这是 Java 8 中的输出
✘ magg@MacBook-Pro-de-Miguel ~/Desktop/CODE java TimeTest
2018-09-06T20:13:30.253
1536290010253
2018-09-06T20:13:30.253
✘ magg@MacBook-Pro-de-Miguel ~/Desktop/CODE java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
这是 Java 10 中的输出,如果您看到格式末尾是 6 位而不是 Java 8 中的 3 位,这会中断从 Epoch 到 LocalDateTime 的毫秒数的转换
✘ magg@MacBook-Pro-de-Miguel ~/Desktop/CODE java TimeTest
2018-09-06T20:13:18.568414
1536289998568
2018-09-06T20:13:18.568
✘ magg@MacBook-Pro-de-Miguel ~/Desktop/CODE java -version
java version "10.0.2" 2018-07-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.2+13)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.2+13, mixed mode)
这里是源代码
public class TimeTest{
public static void main(String[] args)
{
TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles"));
LocalDateTime issueTime = LocalDateTime.now();
System.out.println(issueTime.toString());
ZonedDateTime zdt = issueTime.atZone(TimeZone.getDefault().toZoneId());
long timeInMillis = zdt.toInstant().toEpochMilli();
System.out.println(timeInMillis );
LocalDateTime date = LocalDateTime.ofInstant(Instant.ofEpochMilli(timeInMillis), TimeZone.getDefault().toZoneId());
System.out.println(date.toString());
}
}
如何在 Java 10 中解决此问题?
【问题讨论】:
-
试试
LocalDateTime.now().truncatedTo(ChronoUnit.MILLIS)。 -
LocalDateTime是在这里使用的错误类。它确实不 代表一个时刻,缺乏任何时区或与UTC 偏移的概念。使用Instant、OffsetDateTime或ZonedDateTime来表示时刻,时间轴上的特定点。
标签: java date java-8 java-10 localdate