技术科普
UTC 时间存储:跨时区系统的最佳实践
在跨时区系统中,时间存储方式直接影响数据一致性和可维护性。最广泛接受的原则是:以 UTC 存储,按用户时区展示。
为什么用 UTC
- UTC 是全球统一的时间基准,不受夏令时影响
- 便于跨系统比较和排序
- 避免本地时间重复或缺失
- 简化分布式系统的时间同步
存储格式
常用格式包括:
- 数据库的
TIMESTAMP或带时区的类型 - ISO 8601 字符串,如
2027-01-01T12:00:00Z - Unix 时间戳(秒或毫秒)
选择哪种格式取决于系统,但必须明确单位与时区。
需要保留本地时间的情况
并非所有时间都适合转 UTC。例如“每天上午9点开门”是本地墙上时间,应同时存储时区 ID,而不是固定 UTC 时刻。未来日期的预约也需考虑时区规则可能变化。
常见误区
- 存储无时区的本地时间字符串
- 用偏移量代替时区 ID,忽略夏令时
- 在数据库和 API 之间重复转换
- 假设所有用户都在同一时区
UTC 存储不是万能公式,关键是区分“瞬间”和“本地规则”,并为后者保留时区信息。