Clockhub Logo
博客联系我们
全部文章
参考4 分钟阅读

UTC 偏移与夏令时实用指南

「UTC+8」看起来像是某个地点的固定属性,跟纬度一样。它并不是。它是一条规则——而在很多国家,这条规则一年要改两次。排会议、写日志、做系统时踩到的时区坑,几乎全部来自把规则当成了事实。

这篇讲清楚四件事:偏移到底是什么意思、那些奇怪的偏移怎么读、还有哪些地方在改表、以及切换日当天具体会出什么错。

世界标准时区图,上下边缘标着各时区的 UTC 偏移

地图来源:美国中央情报局(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 没有夏令时,不会重复也不会跳过某一秒。数据库里存一个不带偏移的本地时间,就是一颗等到三月才爆的雷。

一份可执行的检查清单

  1. 永远不要存不带偏移的本地时间。 2026-03-08 02:30 不是一个时间点;2026-03-08T02:30-05:00 才是。
  2. 配置里优先写 IANA 时区名而不是偏移。 America/New_York 自带夏令时规则,UTC-5 没有。
  3. 排周期性会议前,两边的切换日期都要查。 可能一边改了另一边没改。
  4. 正视那个「不存在的时刻」。 如果有周期性任务落在当地 00:00 到 03:00 之间,务必确认切换日的行为。
  5. 别假定偏移都是整小时。 半小时和 45 分钟偏移真实存在,会让朴素的加减法出错。

怎么核对一次换算

一次性换算,最可靠的办法是把两个时区并排看,而不是做心算。时区转换器会显示每个时区当前的偏移并自动处理夏令时;想同时盯多个时区,世界时钟更合适。

如果要算的是时长而不是时间点——「这两个时间戳之间隔了几小时」——用时间计算器,它按绝对流逝时间计算,天然不受夏令时影响。