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。和美国东部时间不同,它们都不实行夏令时。