我刚开始使用 Java 的内置时间 API。我正在尝试获取 UTC 中的当前时间,并且希望能够将其转换为运行该程序的人的时区。现在我有这个代码:
Clock clock = Clock.systemUTC();
LocalDateTime time = LocalDateTime.now(clock);
ZonedDateTime zonedTime = time.atZone(ZoneId.systemDefault());
System.out.println("UTC time: " + time + " Local: " + zonedTime);
Run Code Online (Sandbox Code Playgroud)
但是,这会打印出:
UTC time: 2022-06-01T15:25:57.933673600 Local: 2022-06-01T15:25:57.9336736-05:00
Run Code Online (Sandbox Code Playgroud)
它似乎正在获取正确的时区,但没有将其应用于输出。所以如果我打印
time.getHour()
zonedTime.getHour()
Run Code Online (Sandbox Code Playgroud)
他们都打印出“15”。让它给我应用时区偏移的时间的正确方法是什么?UTC 时间是 15,但我的本地时间是 10。我希望能够将 UTC 转换为时区时间。
原因是我正在设置保存文件 - 所以我想记录保存文件时的 UTC 时间,但随后能够在用户检查其保存日期时显示用户所在时区的时间电脑。
问题是你使用的LocalDateTime. 它不知道它位于哪个时区 - 所以当你使用LocalDateTime.atZone它时,假设您希望保持相同的本地日期/时间。
这里最好的解决方法是更改LocalDateTime.now(clock)为Instant.now(clock). 您感兴趣的是“当前时刻”,而不是“UTC 当地时间”。
或者,将Clock系统时区中的 与 一起使用ZonedDateTime.now(clock)。
| 归档时间: |
|
| 查看次数: |
523 次 |
| 最近记录: |