时区转换器回答的问题,和 epoch 转换器不一样。后者告诉你一个数字代表哪一个瞬间;这个工具则是拿到某个时区下的日期和时间,告诉你同一瞬间在其他地方是几点。
用 IANA 名字,别用缩写
选 America/New_York、Europe/London、Asia/Tokyo 这样的名字,它们携带了某地完整的历史偏移和夏令时规则。CST、IST 这类缩写含义重叠、极易歧义,而 UTC-5 这样的固定偏移根本描述不了一个会调表的区域。
把两个概念分清楚
- 瞬间(instant) 是 UTC 时间轴上的一个点,通常以 Unix 时间戳存储。
- 本地日期时间 是一个钟面读数,配上时区之后才能确定一个瞬间。
- UTC 偏移 是某一刻相对 UTC 的数值差,它会随夏令时的起止而改变。
存储时用时间戳或 UTC 值。对于周期性的业务日程,还要把 IANA 时区一并保留,这样“每周一上午 9:00”才会一直是用户预期的那个本地钟面时间。
Frequent questions:
- Q: UTC 和 GMT 有什么区别?
- A: 日常使用中,UTC(协调世界时)和 GMT(格林尼治标准时间)几乎是一回事:两者都位于零度经线、偏移为零。技术上的区别在于,GMT 是基于格林尼治皇家天文台平太阳时的一个时区,而 UTC 是一套原子时标准。编程场景里一般都用 UTC。
- Q: 夏令时会影响 Unix 时间戳吗?
- A: 不会。Unix 时间戳始终以 UTC 秒计量,所以夏令时不影响它本身;夏令时只在把时间戳转换到某个本地时区显示时才起作用。本转换器会按所选时区和日期自动套用正确的夏令时偏移。
- Q: 什么是 IANA 时区标识?
- A: IANA 时区标识(也叫 Olson 时区名)是形如 'America/New_York' 或 'Asia/Tokyo' 的字符串,它唯一地标识一个时区区域,并携带该区域全部的历史偏移和夏令时规则。这些标识由 IANA 时区数据库维护,主流操作系统和编程语言都支持。
- Q: 数据库里该存 UTC 还是本地时间?
- A: 始终存 UTC(或 Unix 时间戳)。用户的时区偏好单独存一列,只在展示时再转成本地时间。这样可以避开夏令时切换时的歧义,也让跨时区比较变得可靠。