UTC 偏移与夏令时实用指南
「UTC+8」看起来像是某个地点的固定属性,跟纬度一样。它并不是。它是一条规则——而在很多国家,这条规则一年要改两次。排会议、写日志、做系统时踩到的时区坑,几乎全部来自把规则当成了事实。
这篇讲清楚四件事:偏移到底是什么意思、那些奇怪的偏移怎么读、还有哪些地方在改表、以及切换日当天具体会出什么错。

地图来源:美国中央情报局(CIA),公有领域,来自 Wikimedia Commons
偏移是什么
偏移是本地时钟与协调世界时(UTC)之间的差值,写法是 UTC 加正负号和小时数。
- UTC+08:00 表示本地时钟比 UTC 快 8 小时。UTC 是 04:00 时,当地是 12:00。
- UTC−05:00 表示本地时钟比 UTC 慢 5 小时。UTC 是 04:00 时,当地是前一天 23:00。
最容易错的就是正负号。正偏移在本初子午线以东,负偏移以西;东边快,西边慢。
GMT 和 UTC 不是一回事
GMT(格林尼治标准时间)是一个偏移为 UTC+0 的时区,英国冬季仍在使用。UTC 是原子时标准,偏移量都以它为基准。日常使用中两者可以互换,但「GMT+8」这种写法严格说是错的,正确形式是「UTC+8」。有些系统仍会输出 GMT 风格的标签,当作 UTC 处理即可。
不是整点的偏移
世界上大约四分之三的偏移是整小时,正因为如此,剩下那些特别容易被忘掉:
| 偏移 | 使用地 |
|---|---|
| UTC+05:30 | 印度、斯里兰卡 |
| UTC+05:45 | 尼泊尔 |
| UTC+08:45 | 澳大利亚西部 Eucla |
| UTC+09:30 | 澳大利亚中部(北领地、南澳) |
| UTC+10:30 | 豪勋爵岛 |
| UTC+12:45 | 新西兰查塔姆群岛 |
| UTC+13:00 | 汤加、萨摩亚、基里巴斯(莱恩群岛) |
| UTC−03:30 | 加拿大纽芬兰 |
| UTC−09:30 | 马克萨斯群岛 |
尼泊尔的 45 分钟偏移是全球独一份。如果你在写任何「假定偏移一定是 3600 秒整数倍」的代码,上面这几行就是会把它搞崩的地方。
一个国家,一个偏移
中国横跨约五个地理时区,却全国统一使用 UTC+8。在新疆西部,太阳可能上午 10 点才升起。西班牙地理上大致位于 UTC+0,却使用 UTC+1(夏季 UTC+2)以对齐中欧。这些都是政治选择而非天文结果——也提醒我们:时区是立法,不是几何。
夏令时
夏令时在春季把时钟拨快一小时、秋季拨回一小时,让日照时段与工作时间更贴合。
还在改表的地方
- 欧盟与英国——3 月最后一个周日到 10 月最后一个周日。
- 美国与加拿大——3 月第二个周日到 11 月第一个周日。
- 澳大利亚与新西兰——位于南半球,日期正好相反:9 月底或 10 月初开始,次年 4 月初结束。
- 智利、巴拉圭、巴西部分地区——南半球日程,各有本地变体。
已经不改表的地方
- 中国——1986 至 1991 年试行过,之后取消。
- 日本——1948 至 1951 年实行过,此后未再恢复。
- 印度、东南亚大部分地区、俄罗斯、土耳其——无夏令时。
- 非洲与中东大部分地区——无夏令时,个别例外。
- 夏威夷、亚利桑那(纳瓦霍保留地除外)、波多黎各——美国境内选择退出的地区。
如果你在协调东京和纽约,一年中大部分时间差 14 小时,中间会短暂变成 13 小时,然后回到 14。这个数字并不稳定,稳定的只有两个时区各自的规则。
切换日当天会出什么错
每年都会重复出现两类 bug,根因相同:都假定每个本地时刻只存在一次。
春季拨快:某个本地时间根本不存在。 美国时钟从 02:00 直接跳到 03:00,那天没有 02:30。定在 02:30 的定时任务,可能不执行、可能推迟到 03:00 执行、也可能执行两次——取决于系统实现。欧盟从 01:00 跳到 02:00,同理,01:30 不存在。
秋季拨回:某个本地时间出现两次。 时钟从 02:00 退回 01:00,01:30 会发生两次,相隔一小时。朴素实现的调度器会触发两次;一条只写着「01:30」的日志,不带偏移就无法判断是哪一次。
两种情况的正解是同一个:存储和比较一律用 UTC,只在展示时转本地。 UTC 没有夏令时,不会重复也不会跳过某一秒。数据库里存一个不带偏移的本地时间,就是一颗等到三月才爆的雷。
一份可执行的检查清单
- 永远不要存不带偏移的本地时间。
2026-03-08 02:30不是一个时间点;2026-03-08T02:30-05:00才是。 - 配置里优先写 IANA 时区名而不是偏移。
America/New_York自带夏令时规则,UTC-5没有。 - 排周期性会议前,两边的切换日期都要查。 可能一边改了另一边没改。
- 正视那个「不存在的时刻」。 如果有周期性任务落在当地 00:00 到 03:00 之间,务必确认切换日的行为。
- 别假定偏移都是整小时。 半小时和 45 分钟偏移真实存在,会让朴素的加减法出错。
怎么核对一次换算
一次性换算,最可靠的办法是把两个时区并排看,而不是做心算。时区转换器会显示每个时区当前的偏移并自动处理夏令时;想同时盯多个时区,世界时钟更合适。
如果要算的是时长而不是时间点——「这两个时间戳之间隔了几小时」——用时间计算器,它按绝对流逝时间计算,天然不受夏令时影响。