太平洋标准时间通常写作 UTC-8,PST 是它的标准时缩写。America/Los_Angeles 在夏令时期间使用 PDT,也就是 UTC-7。
有地点名的时候就用地点名
写代码或保存用户偏好时,优先用 America/Los_Angeles,而不是缩写或裸偏移。IANA 时区携带了一个地区完整的历史规则和夏令时规则;偏移只告诉你某一刻和 UTC 差多少。
转换一个 epoch 值
Unix 时间戳本身就是一个瞬间。想在这个时区里显示它,数值原样不动,只用选定的 IANA 名字去格式化。钟面显示会变,事件本身不会。
const date = new Date(1700000000 * 1000);
const text = new Intl.DateTimeFormat("zh-CN", {
dateStyle: "medium",
timeStyle: "medium",
timeZone: "America/Los_Angeles",
}).format(date);
关于排程
如果一个会议或定时任务是按当地钟面时间定义的,请把 IANA 时区和日程一起存。如果它是一次性事件,就存换算出来的 UTC 瞬间或 Unix 时间戳。把这两种情况分开,夏令时切换才不会变成一次意外改期。
Frequent questions:
- Q: 怎么把 epoch 转成 PST?
- A: 把 epoch 时间戳粘进转换器,时区选 America/Los_Angeles。结果在冬季显示为 PST、夏季显示为 PDT,与该日期下真实的太平洋时间规则一致。
- Q: PST 永远是 UTC-8 吗?
- A: PST 本身是 UTC-8,但太平洋时间在夏令时期间会切到 PDT(UTC-7)。转换真实时间戳时,请用 America/Los_Angeles,而不是一个固定的 PST 偏移。
- Q: 把 epoch 转成加州时间该选哪个时区?
- A: 选 America/Los_Angeles。它覆盖洛杉矶、旧金山、圣迭戈以及加州绝大多数太平洋时间的换算场景,夏令时规则也是对的。