技术科普

UTC 时间存储:跨时区系统的最佳实践

在跨时区系统中,时间存储方式直接影响数据一致性和可维护性。最广泛接受的原则是:以 UTC 存储,按用户时区展示。

为什么用 UTC

  • UTC 是全球统一的时间基准,不受夏令时影响
  • 便于跨系统比较和排序
  • 避免本地时间重复或缺失
  • 简化分布式系统的时间同步

存储格式

常用格式包括:

  • 数据库的 TIMESTAMP 或带时区的类型
  • ISO 8601 字符串,如 2027-01-01T12:00:00Z
  • Unix 时间戳(秒或毫秒)

选择哪种格式取决于系统,但必须明确单位与时区。

需要保留本地时间的情况

并非所有时间都适合转 UTC。例如“每天上午9点开门”是本地墙上时间,应同时存储时区 ID,而不是固定 UTC 时刻。未来日期的预约也需考虑时区规则可能变化。

常见误区

  • 存储无时区的本地时间字符串
  • 用偏移量代替时区 ID,忽略夏令时
  • 在数据库和 API 之间重复转换
  • 假设所有用户都在同一时区

UTC 存储不是万能公式,关键是区分“瞬间”和“本地规则”,并为后者保留时区信息。