在编程世界里,有一个话题每隔几个月就会重新刷屏一次 Hacker News 和 Reddit 的 r/programming:时间与时区处理。而每一次刷屏,几乎总有人贴出同一条视频——Computerphile 频道由英国科普人 Tom Scott 主讲的《The Problem with Time & Timezones》。这条发布于 2013 年的老视频,是计算机教育领域被引用最多的“痛点课”之一:它用不到二十分钟,把“为什么时间处理是编程界公认的超级深坑”讲得淋漓尽致。本文将带你完整拆解这条视频的论证链条,补上它没讲透的理论背景,标注哪些信息已经随时间过时,最后给出三条可以直接落地的工程实践建议。
⚠️ 数据说明:本文撰写环境无法实时联网核验,视频的标题、频道、主讲人均为长期稳定的公开信息;播放量为多年累积的量级估计(数百万级以上),具体数字请以频道页面当日显示为准。
| 项目 | 内容 |
|---|---|
| 视频标题 | The Problem with Time & Timezones - Computerphile(时区问题) |
| 频道 | Computerphile(英国计算机科普频道,Nottingham 大学团队运营) |
| 主讲人 | Tom Scott(英国知名科技科普人,YouTube 大奖得主,据频道页面) |
| 发布时间 | 2013 年(据频道页面历史信息) |
| 播放量 | 数百万级以上,常年随“时区灾难新闻”周期性回温(未经当日实时核验) |
| 时长 | 约 17 分钟 |
| 观看方式 | 在 YouTube 搜索 "The Problem with Time & Timezones Computerphile" 即可达 |
这条视频的经典地位体现在一个奇特现象上:每当现实中爆发一次与时区相关的重大事故(例如 2022 年闰秒废除决议、各国夏令时政策变动、大型系统因时间 bug 宕机),社交平台上总会有人重新转发它,评论区随之涌入新一波“受苦归来”的程序员。可以说,它已经从“一条视频”变成了“时间问题的文化符号”。
视频开篇,Tom Scott 就给出了一个看似夸张、实则被整个行业反复验证的断言:如果你要写任何涉及时间的程序,那么时间会以你想象不到的方式反咬你一口。他的原话大意是——时间处理“藏着你做梦都想不到的复杂度”。
这个开场并非危言耸听。他把问题拆成了三个层次:
而所有事故,都发生在这三个层次互相换算的缝隙里。
视频中最有冲击力的演示,是夏令时(DST)切换时刻的悖论。以英国为例:
Tom Scott 用这个问题引出了视频的核心教训之一:“本地时间”根本不是一个时刻(instant),它只是一张“贴在墙上的人为标签”。同一个本地时间字符串,在不同日期、不同时区规则下,可以对应零个、一个或两个不同的物理时刻。
视频的第二个杀手锏:时区不是地理概念,而是政治概念。Tom Scott 强调,各国政府可以(并且经常)出于经济、能源、外交等理由修改自己的时区和夏令时规则——而且修改的通知期可以短到令全球软件业措手不及。
他列举的现象包括:南半球的夏令时和北半球方向相反(澳大利亚 12 月是夏天);同幅员国家内部可以有多个时区(美国横跨好几个);一些国家历史上整段废掉或恢复夏令时。这意味着:你今天写死的“某地比 UTC 快 8 小时”,明天就可能被一纸法令作废。
这直接推出视频最重要的工程结论:你不可能在自己的代码里硬编码时区规则,必须依赖一个持续更新的时区数据库,并保持它随系统更新。
视频的后半段,Tom Scott 以航班/酒店预订系统为例,演示了一个真实的工程噩梦链条:用户在伦敦预订“当地时间 4 月 X 日 9:00 从纽约起飞”的航班——
这段演示是整条视频的知识内核:时间 bug 的可怕不在于单点错误,而在于它是全局污染源。
视频最终收束到那条被无数团队贴在代码规范里的铁律:
这条视频之所以十多年长盛不衰,是因为它背后有一整套真实、严谨的标准与工程史支撑。
视频里说的“物理时间”,现实中的锚点是世界协调时 UTC,由国际计量局(BIPM)汇总全球约 400 多台原子钟计算得出。但地球自转并不均匀,导致 UTC 与“地球朝向太阳的角度”会缓慢漂移,于是 1972 年起人类发明了闰秒——在 6 月 30 日或 12 月 31 日最后一天随机插入一秒。据 BIPM 与多家媒体报道,闰秒的不规则插入曾多次引发互联网基础设施故障,其中最著名的是 2012 年 6 月 30 日:当天插入闰秒后,Reddit、LinkedIn、Mozilla 等大量基于 Linux 的服务因内核时钟处理异常而宕机(据当年多家科技媒体报道,未经官方统一证实全部细节)。2022 年 7 月,Meta 发表工程博客《It's Time to Leave the Leap Second in the Past》,联合多家巨头呼吁废除闰秒;同年 11 月,国际计量大会(CGPM)决议:最迟于 2035 年前取消闰秒机制——这是视频发布后世界发生的重要更新。
Tom Scott 说“你必须依赖持续更新的时区数据库”,这个数据库现实中的名字是 IANA Time Zone Database(又称 tz database、Olson database),由程序员 Arthur David Olson 于 1980 年代创立、长期由 Paul Eggert 维护,现由 IANA(互联网号码分配机构)官方托管。它以文本规则的形式记录了全球数百个时区的历史与未来规则,几乎被所有操作系统、编程语言标准库内嵌。tzdb 的更新记录本身就是一部“时区政治史”——某国临时宣布变更 DST,数日内 tzdb 就会发布补丁版本,全世界的服务器再通过系统更新扩散。视频里“时区是政治”的论断,tzdb 的 changelog 就是最好的证据。
工程实践中的“存 UTC”通常落地为 Unix 时间戳——自 1970-01-01 00:00:00 UTC 起的秒数。但它有一个被广泛记载的隐患:传统 32 位有符号整数最大只能表示到 2038 年 1 月 19 日 03:14:07 UTC,再往后即溢出为负数。这就是“Y2K38 问题”。现代 64 位系统已基本免疫,但大量嵌入式设备仍需迁移,属于真实且被行业持续跟踪的工程议题。
视频没有点名列举事故,但行业史上有大量案例可以为其背书,以下均为公开报道过的真实事件:
视频中提到的坑,直接催生了一代时间库的替换浪潮:Java 旧有的 Date/Calendar API 因设计缺陷臭名昭著,最终被 JSR-310(即 java.time,源自 Joda-Time 项目)取代;JavaScript 的 Date 对象由 Brendan Eich 在 1995 年用十天仓促实现(据其本人多次公开演讲自述),缺陷延续至今,社区正在推进替代方案 Temporal 提案;Python 3.9 起标准库内置了 zoneinfo 模块,直接对接 IANA tzdb。这些进化史说明:视频提出的坑是行业共识,主流生态的解法也高度一致。
Tom Scott 的表述带有科普节目特有的戏剧化色彩(“最难的问题”“做梦都想不到”),从学术角度看有所放大;但从工程事故史的密度来看,这个定性在工业界几乎没有遭到过认真反驳——Stack Overflow 上关于时间处理的最高赞回答,长期引用的正是这条视频。
立刻检查你的数据库和 API:所有表示绝对时刻的字段一律以 UTC 存储,并强制命名后缀 _utc(如 created_at_utc);只有“本地墙上时间”语义的字段(如“门店营业时间”)才存本地时间,并且必须配一个 IANA 时区标识符字段(如 Asia/Shanghai,而不是 +08:00 偏移量)。命名即契约,让下一个接手的工程师不可能误解。
把“未来日历事件”“历史时间戳”“耗时测量”区分为三类需求,分别对应三种工具:未来事件存本地时间+时区规则;历史与日志存 UTC 时间戳;耗时测量用单调时钟(Java 用 System.nanoTime(),Python 用 time.monotonic(),而非 Date.now())。这一条区分可以消灭你系统里 80% 的潜在时间 bug。
在你的单元测试里永久加入两类边界用例:“本地时间不存在”(春季跳变时刻)和“本地时间重复”(秋季回拨时刻),以及一条跨时区往返测试(存入→读出→再存入必须完全一致)。时间 bug 之所以反复发生,正是因为几乎所有测试都默认“每天都是 24 小时”。
flowchart TD
A["开场断言:时间处理是编程第一深坑"] --> B["物理时间 UTC:原子钟,客观连续"]
A --> C["墙上时间:政府立法,随时可改"]
A --> D["程序时间:整数时间戳"]
C --> E["证据1:DST 跳变<br/>1:30 不存在 / 出现两次"]
C --> F["证据2:时区是政治<br/>规则随时政变动"]
C --> G["证据3:预订系统换算链<br/>起点错则全链路错"]
E --> H["推论:本地时间只是标签<br/>不是物理时刻"]
F --> I["推论:必须依赖<br/>IANA 时区数据库并持续更新"]
G --> J["推论:换算错误是<br/>全局污染源"]
H --> K["最终铁律:存储与计算一律 UTC<br/>仅在展示层转本地时区"]
I --> K
J --> K
K --> L["行业实践印证<br/>tzdb / java.time / zoneinfo / Temporal"]
K --> M["后续演进补充<br/>闰秒2035废除 / 单调时钟 / 未来事件存本地时间"]
本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
