获取 JVM 和 UTC 之间的时间差(以毫秒为单位)

问题描述 投票:0回答:1

我很难弄清楚一个看似简单的问题。

我想计算 UTC 即时和 JVM 即时(即特定于运行代码的机器)之间的毫秒差(偏移?)。

我尝试了以下初始化(抱歉,这是在 Kotlin 中,而不是 Java):

// 1
val difference = TimeZone.getDefault().getOffset(System.currentTimeMillis())

// 2
val difference = ZoneId.systemDefault().rules.getOffset(Instant.EPOCH).totalSeconds * 1000

// 3
val difference = ZonedDateTime.now(ZoneId.systemDefault()).offset.totalSeconds * 1000

更具体地说:我今天(2024 年 2 月 22 日,即夏令时期间)在美国西海岸的 Mac 上运行此程序。当我寻找将产生

-28800000
(即 DST 敏感/基于即时)的初始化时,所有 3 个初始化都会产生
-25200000
(即基于时区)。

我在这里做错了什么?

我希望解决方案与时区/机器无关(即我可以在世界各地的任何机器上运行此代码,而无需任何特定输入,例如字符串时区)。

java kotlin time timezone dst
1个回答
0
投票

美国西海岸目前不是夏令时。美国西海岸使用的时区 America/Los_Angeles 目前 与 UTC 相差 28800000 毫秒。

这里的 JVM 是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.