我很难弄清楚一个看似简单的问题。
我想计算 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
(即基于时区)。
我在这里做错了什么?
我希望解决方案与时区/机器无关(即我可以在世界各地的任何机器上运行此代码,而无需任何特定输入,例如字符串时区)。
美国西海岸目前不是夏令时。美国西海岸使用的时区 America/Los_Angeles 目前 与 UTC 相差 28800000 毫秒。
这里的 JVM 是正确的。