时区
时区(timezone)是地球上使用同一标准时间的区域。它的核心是「与协调世界时(UTC)的偏移量」:某地本地时间 = UTC 时间 + 该地偏移。例如中国大陆位于东八区,偏移为 UTC+8,通常写作 +08:00;纽约冬季为 -05:00。UTC 是全球统一的时间基准,不随地域变化,是所有时区换算的参照点。
实际开发中,时区不只是一个固定数字。业界普遍使用 IANA 时区数据库(tz database),以 Asia/Shanghai、America/New_York 这样的「区域/城市」名来标识。命名时区携带了夏令时(DST)规则和历史上的偏移变更,能自动算出任意日期的正确偏移;而单纯的 +08:00 只是某一刻的静态偏移,不知道夏令时何时切换。
使用时要注意几点:
- 存储和传输时间尽量统一用 UTC 或带偏移的时间戳,只在展示给用户时才转成本地时区;
- 不要混淆「固定偏移」和「命名时区」——只有后者能正确处理夏令时的春秋切换;
- 时区缩写有歧义,例如
CST既可指中国标准时间,也可指美国中部时间,代码里应优先用 IANA 名称而非缩写。
常见问题
UTC 偏移和时区是一回事吗?
不完全是。UTC 偏移(如 +08:00)只是某一时刻本地时间与 UTC 的差值;时区(如 Asia/Shanghai)是一整套规则,包含夏令时和历史变更,能推算出不同日期对应的偏移。同一时区在夏令时前后偏移可能并不相同。
为什么推荐把时间统一存成 UTC?
UTC 全球唯一、不受夏令时和地域影响。用 UTC 存储能避免跨时区计算出错和数据歧义,只需在展示时按用户所在时区转换即可,服务端逻辑也更简单。
中国有几个时区,有夏令时吗?
中国大陆全境统一使用 UTC+8(北京时间),目前没有夏令时。但历史上 1986 至 1991 年曾实行过夏令时,处理这段历史时间时要注意偏移会有一小时差异。