Swift中1892年之前的时间打印异常原因探究
Swift中1891年及更早日期的时间偏移问题解析
这不是Bug,而是历史时间标准差异导致的合理行为,具体说明如下:
现象复现
创建并打印1891年及更早的日期时,会出现2分16秒的时间偏移,1892年及之后的日期则显示正常:
// 存在偏移的日期输出 let year1891 = Calendar.current.date(from: .init(year: 1891, hour: 9)) print(year1891!) // 输出:1891-01-01 08:02:16 +0000 // 正常的日期输出 let year1892 = Calendar.current.date(from: .init(year: 1892, hour: 9)) print(year1892!) // 输出:1892-01-01 08:00:00 +0000
原因解析
这个偏移来自天文格林威治标准时间(GMT)与协调世界时(UTC)的历史差值:
- 早期的GMT是基于天文观测计算的时间标准,现代UTC则是基于原子钟的精确时间标准,两者在历史上存在微小的累计差值(称为ΔT值)。
- 1891年时,天文GMT与UTC的差值正好是2分16秒。
- iOS/macOS使用的时区数据库包含完整的历史时间标准变更记录,系统会自动根据年份匹配对应的时间标准,因此处理1891年及更早日期时,会将这个历史差值计算进去,导致输出出现偏移。
总结
这种行为是系统为了准确还原历史时间标准而做的正确处理,并非代码或系统Bug。
内容的提问来源于stack exchange,提问作者Hollycene
相关产品推荐
相关产品推荐

