你有没有想过,电脑是怎么知道"纽约现在是否处于夏令时"的?答案就是 IANA 时区数据库——一套公开维护的全球时区规则库,几乎所有现代操作系统、编程语言和网站都在使用。
它又称 tz database、zoneinfo 或 Olson database,由互联网号码分配局(IANA)维护,记录了从 1970 年(部分地区更早)以来全球各地区的时区偏移、夏令时起止规则与历史变更。它不只是一个偏移表,而是一套完整的时间规则历史。
这套数据库最早由 Arthur David Olson 于 1980 年代发起,后由志愿者与 IANA 共同维护,每年随各国政策变化更新数个版本。
数据库中的时区采用"区域/城市"格式命名,例如 Asia/Shanghai、America/New_York、Europe/London、Australia/Sydney。这种命名比"UTC+8"或"CST"可靠得多,因为它指向一个具体的地理区域,而不是一个可能变化的数值或模糊的缩写。
这正是软件开发中的最佳实践:存储时间时用 UTC 或时间戳,存储用户时区时用 Asia/Shanghai 这样的标识符,展示时再由系统按当前规则换算。这样即使某国突然修改夏令时政策,只要更新时区数据库,历史与未来时间的换算都会自动正确。
因为偏移量会变。伦敦冬季是 UTC+0、夏季是 UTC+1;中国曾在 1986 至 1991 年实行夏令时;个别国家甚至会永久更改所属时区。如果系统里硬编码"+8",一旦规则变动,所有历史数据都会算错。使用 IANA 标识符则完全没有这个问题。
IANA 定期发布新版本,操作系统与语言运行时通过系统更新或库更新同步。PHP 通过 timezonedb 扩展更新,Java 随 JDK 更新,Linux 发行版则通过 tzdata 软件包更新。服务器长期不更新可能会出现个别地区时间算错的情况,因此运维中建议定期检查时区库版本。
本站所有城市时间页面均内置 IANA 时区规则,并为每座城市标注了对应的时区标识符(例如东京为 Asia/Tokyo、纽约为 America/New_York)。页面时钟按该规则实时换算,进入或退出夏令时会自动生效,无需人工维护。若需同时对照多座城市,可以使用 时区对比工具 一次查看最多 8 城的当地时间、UTC 偏移与工作状态。