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

为何JavaScript中new Date()与带Z的日期字符串实例化时区结果不同?

问题描述

我在JavaScript中尝试展示日期,从Java后端的Instant对象获取到格式为2020-09-22T17:10:25Z的日期字符串。调用new Date("2020-09-22T17:10:25Z")得到Tue Sep 22 2020 20:10:25 GMT+0300 (Eastern European Summer Time),但我实际处于GMT+0200时区;而调用new Date()得到Thu Dec 08 2022 20:34:11 GMT+0200 (Eastern European Standard Time),是正确时区。想请教为何两种方式时区结果不同?其中字符串中的Z代表Zulu(零时区偏移)。

问题解答

这是因为**夏令时(DST)**的影响:

  • 你解析的日期2020-09-22处于东欧夏令时生效时段,此时该时区的偏移是GMT+0300;而当前日期2022-12-08处于东欧冬令时时段,偏移为GMT+0200。
  • JavaScript的Date对象在解析带时区标识(这里的Z代表零时区)的字符串时,会将其转换为你本地时区的对应时间,并且会自动应用该日期所在时段的夏令时/冬令时规则。
  • 两者的时区显示差异并非错误,只是对应不同日期时段的时区偏移规则:9月属于夏令时周期,转换后的本地时间使用GMT+0300;12月是冬令时周期,new Date()显示GMT+0200,都是符合本地时区规则的正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 09:55:09