UTC+9 是日本、韩国等地使用的固定偏移。但偏移本身并不能指明一个地点,也不携带该地的历史时区规则。
有地点名的时候就用地点名
写代码或保存用户偏好时,优先用 Asia/Tokyo,而不是缩写或裸偏移。IANA 时区携带了一个地区完整的历史规则和夏令时规则;偏移只告诉你某一刻和 UTC 差多少。
转换一个 epoch 值
Unix 时间戳本身就是一个瞬间。想在这个时区里显示它,数值原样不动,只用选定的 IANA 名字去格式化。钟面显示会变,事件本身不会。
const date = new Date(1700000000 * 1000);
const text = new Intl.DateTimeFormat("zh-CN", {
dateStyle: "medium",
timeStyle: "medium",
timeZone: "Asia/Tokyo",
}).format(date);
关于排程
如果一个会议或定时任务是按当地钟面时间定义的,请把 IANA 时区和日程一起存。如果它是一次性事件,就存换算出来的 UTC 瞬间或 Unix 时间戳。把这两种情况分开,夏令时切换才不会变成一次意外改期。
Frequent questions:
- Q: UTC+9 现在是几点?
- A: 本页顶部的 UTC+9 实时时钟每秒刷新。由于 UTC+9 范围内没有任何主要辖区实行夏令时,它全年都正好比 UTC 早 9 小时。
- Q: UTC+9 就是 JST 或 KST 吗?
- A: 是的——日本标准时间和韩国标准时间都等于 UTC+9,两国都不实行夏令时。印尼东部和东帝汶也使用同一偏移。
- Q: UTC+9 和 GMT+9 一样吗?
- A: 一样——都表示比零度经线早 9 小时,可以互换。但写代码时请用 UTC。
- Q: UTC+9 实行夏令时吗?
- A: 不实行。日本曾在 1948 到 1951 年间短暂用过夏令时,韩国也断断续续实行过,但已于 1988 年废止。如今 UTC+9 全年稳定不变。
- Q: 怎么把 UTC+9 的时间转成 Unix 时间戳?
- A: 从钟面时间减去 9 小时得到 UTC,再取自 1970-01-01 00:00 UTC 以来的秒数。上面的代码示例里有一行搞定的写法。