Unix时间戳时区UTC时间格式化
时间相关的问题,九成发生在“时区/格式化/单位”三个维度的错配。线上日志看着像“延迟了一小时”,导出的报表又对不上;抓包里是毫秒,数据库里是秒;后端打印UTC,前端展示本地时间……把这些规则一次讲清楚,你的时间问题会减少到可忽略。
先明确概念:
- Unix时间戳是从 1970-01-01 00:00:00 UTC 起算的秒数(或毫秒数,不含闰秒);
- UTC是“世界协调时”,没有夏令时;
- 本地时间 = UTC + 时区偏移(如北京是 UTC+8)。
三条工程准则:
- 存储用UTC的时间戳(统一秒或毫秒,别混用);
- 传输中也用UTC,避免跨地区团队理解不同;
- 展示层按用户/站点时区格式化为可读字符串。
“看起来晚了/早了1小时”的问题,往往是夏令时或误把时区偏移写死导致。要么全链路UTC,要么就把“用户时区”做成显式参数,不要靠“系统默认时区”碰运气。
格式化字符串也容易出错:大小写与语义不同,比如 YYYY 与 yyyy 在某些库里并非一回事,Z/ZZ 也不一样。统一使用团队内约定的库与模板,并把格式写在配置与文档里。日志里建议同时打印“时间戳 + ISO8601(UTC)”,定位问题方便得多。
我们的“Unix时间戳转换”工具做了两件很工程的事:
- 同时显示本地时间与UTC时间;
- 秒与毫秒一键切换;
- 支持批量转换(贴一列时间/时间戳,得到另一列结果);
- 支持所有时区的换算,便于跨国团队协作;
- 支持自定义格式化模板,现场验证你写的格式到底对不对。
最后给一个“十分钟体检”清单:
- 统一单位:秒 or 毫秒?文档写清楚;
- 统一时区:存储与传输走UTC,展示再转本地;
- 统一格式:ISO8601优先;
- 统一库:后端/前端各自选一套稳定库,不要混搭;
- 统一日志:时间戳与UTC字符串同时打印。
当你把这些小约定敲定下来,时间相关的线上问题会锐减。
相关在线工具:
- 立即使用 Unix 时间戳转换