Java中ZonedDateTime转换America/Phoenix时区到GMT结果异常问题
时区转换偏差问题原因
你的代码运行结果完全正确,偏差来自你对时区偏移计算逻辑的理解错误:
- 首先明确时区偏移的定义:
America/Phoenix属于西七区,GMT偏移为-07:00,这个偏移值的含义是:凤凰城当地时间 = GMT标准时间 - 7小时。反过来推导同一时刻的GMT时间,公式应该是GMT时间 = 凤凰城当地时间 + 7小时。 - 代入你代码里的数值:凤凰城当地时间为2022-06-27 10:00,对应GMT时间就是10+7=17:00,和程序输出的
2022-06-27T17:00Z[GMT]完全吻合。 - 你预期得到3:00的结果,本质是把偏移计算方向搞反了:你错误使用了
GMT时间 = 凤凰城当地时间 -7小时的公式,相当于把偏移方向颠倒了两次,最终和正确结果差出14小时。
常识验证:西时区的时间比GMT时间晚,也就是说当凤凰城是上午10点时,GMT所在的0时区时间比当地早7小时,已经是当天下午17点,不可能反而早到凌晨3点。
另外你使用的withZoneSameInstant方法没有问题,这个方法的作用就是保留时间线上的同一瞬时点,切换为目标时区的时间表示,是Java时区转换的正确写法。
内容的提问来源于stack exchange,提问作者Srinivas Nangana
相关产品推荐
相关产品推荐

