UTC-5 是一个固定偏移,它不等同于“东部时间”:纽约在标准时是 UTC-5,在夏令时是 UTC-4。

有地点名的时候就用地点名

写代码或保存用户偏好时,优先用 America/Bogota,而不是缩写或裸偏移。IANA 时区携带了一个地区完整的历史规则和夏令时规则;偏移只告诉你某一刻和 UTC 差多少。

转换一个 epoch 值

Unix 时间戳本身就是一个瞬间。想在这个时区里显示它,数值原样不动,只用选定的 IANA 名字去格式化。钟面显示会变,事件本身不会。

const date = new Date(1700000000 * 1000);

const text = new Intl.DateTimeFormat("zh-CN", {
  dateStyle: "medium",
  timeStyle: "medium",
  timeZone: "America/Bogota",
}).format(date);

关于排程

如果一个会议或定时任务是按当地钟面时间定义的,请把 IANA 时区和日程一起存。如果它是一次性事件,就存换算出来的 UTC 瞬间或 Unix 时间戳。把这两种情况分开,夏令时切换才不会变成一次意外改期。

Frequent questions:

Q: UTC-5 现在是几点?
A: 本页顶部的 UTC-5 实时时钟每秒刷新。要注意北美东部时间只有在冬季(大致十一月到三月中)才等于 UTC-5,其余时间同一地区是 UTC-4。
Q: UTC-5 就是 EST 吗?
A: EST(东部标准时间)确实是 UTC-5,但只在美加的冬季有效。三月中到十一月初,同一地区会切到 EDT(UTC-4)。想要一个全年固定的 UTC-5 锚点,用 America/Bogota 或 America/Lima。
Q: UTC-5 和 GMT-5 一样吗?
A: 一样——都表示比零度经线晚 5 小时,日常使用中可以互换。但写代码时请用 UTC。
Q: 怎么把 UTC-5 的时间转成 Unix 时间戳?
A: 给钟面时间加上 5 小时得到 UTC,再取自 1970-01-01 00:00 UTC 以来的秒数。上面的代码示例里有一行搞定的写法。
Q: 哪些国家全年使用 UTC-5?
A: 哥伦比亚、秘鲁、厄瓜多尔、巴拿马、牙买加、开曼群岛、墨西哥的金塔纳罗奥州,以及巴西的阿克里州,全年都保持 UTC-5。和美国东部时间不同,它们都不实行夏令时。