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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 00:15:36