JS Date Europe/Berlin时区1893年UTC转本地时间偏差原因咨询
1893与1894年同日期UTC转柏林本地时间出现6分32秒差值的原因
这个差值是时区历史规则变更导致的正常现象,不属于代码错误。
- 1893年4月之前,德国没有全国统一的标准时区,柏林地区使用基于本地经度测算的平太阳时,该时间与UTC的偏移为53分28秒,即测试结果中显示的
GMT+0053。 - 1893年3月德意志帝国正式出台时间标准法案,规定从1893年4月1日起,全国统一启用中欧标准时间(CET,偏移为UTC+1),替代此前各地自行使用的本地平太阳时。切换时柏林本地时间直接从1893年3月31日23:53:28跳至次日01:00:00,两个标准的差值恰好为6分32秒。
- JavaScript的
Date对象执行时区转换时,会调用运行环境内置的IANA时区数据库,该数据库完整记录了全球所有时区从古至今的偏移调整、夏令时切换、规则变更信息,不会用当前生效的固定时区偏移倒推计算所有历史时间。
对应测试代码的返回结果完全匹配上述历史规则:
new Date(Date.UTC(1894,0,1)) // Mon Jan 01 1894 01:00:00 GMT+0100 (Central European Standard Time) // 该时间点在标准切换后,按UTC+1的CET规则计算偏移 new Date(Date.UTC(1893,0,1)) // Mon Jan 01 1893 00:53:28 GMT+0053 (Central European Standard Time) // 该时间点在标准切换前,按当时柏林本地平太阳时的53分28秒偏移计算
内容的提问来源于stack exchange,提问作者Tobi Sorn
相关产品推荐
相关产品推荐

