You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java将UTC时间转换为CST时间时结果多1小时的问题咨询

问题根因
  • 夏令时导致时区偏移不符合你的预期
    你代码中使用的America/Chicago(美国中部时区)存在夏令时规则,2021年该时区的夏令时执行时段为3月14日至11月7日,你要转换的2021-11-05仍处于夏令时区间内,此时时区偏移为UTC-5,而非你默认认为的全年UTC-6。UTC时间22:33减去5小时,得到的就是17:33,和你代码的输出结果一致。你预期的UTC-6偏移是该时区冬令时的规则,要到11月7日夏令时结束后才会生效。
  • 日期格式写法存在逻辑错误
    你在SimpleDateFormat的格式模板中把Z用单引号包裹,这会让Z被当成固定字符串硬拼到结果末尾,而非输出当前时间的实际时区标识。要注意Z是ISO8601规范中专门代表UTC时区的标识,你输出的是芝加哥时区的时间,末尾带Z属于严重的格式错误,会让其他读取该时间的程序误以为这是UTC时间。
修正方案

如果你需要的是固定UTC-6偏移的时间,不需要跟随夏令时变动,直接将时区设置为固定偏移即可,无需使用城市时区:

updateFormat.setTimeZone(TimeZone.getTimeZone("GMT-6"));

调整后输出结果就会和你预期的2021-11-05T16:33:10Z一致(注意这里末尾的Z还是硬拼的,实际逻辑上并不规范,如果不需要保留Z可以把格式模板里的'Z'删掉,或者替换为正确的时区标识占位符)。

内容的提问来源于stack exchange,提问作者NKZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 20:06:09