技术科普

计算机是如何存储时间的?UTC、时间戳与格式化

时间在计算机中如何存储,是很多开发者关心的问题。理解这一点,能帮你避免大量时间相关的Bug。

核心原则:存储用UTC

时间处理有一个重要的最佳实践:存储时使用UTC,显示时转换为本地时间。这样做的好处是:

  • 避免夏令时切换带来的混乱
  • 避免服务器迁移到不同时区后时间错乱
  • 方便跨时区系统统一处理

常见的存储方式

  • 整数时间戳:如 Unix时间戳,存储自1970年以来的秒数或毫秒数
  • 带时区的时间字符串:如 2027-08-16T10:00:00Z(Z表示UTC)
  • 数据库专用类型:如 MySQL 的 DATETIME(不带时区)和 TIMESTAMP(带时区转换)、PostgreSQL 的 timestamptz

容易踩的坑

  • 不带时区的时间:存成了本地时间却没有时区标记,容易误读
  • 混用类型:有的字段存UTC,有的存本地时间,导致计算错误
  • 时区转换错误:忽略夏令时,导致切换日的1小时偏差

推荐做法

  • 后端统一使用UTC存储和计算
  • 前端根据用户时区格式化显示
  • 使用成熟的时区库(如 Java 的 java.time、Python 的 zoneinfo、JavaScript 的 Intl)
  • 日志中显式标注时区

结语

“存UTC、显示本地”是时间处理的金科玉律。掌握它,能让你远离大部分与时间相关的疑难杂症。