看服务器日志,一条记录写着 2026-10-31T04:30:00Z,查了半天发现和本地时间对不上,差了整整 8 小时。这就是 UTC 和北京时间的区别:日志按 UTC 存,你在东八区,要做 utc时间转换就得加 8。
先弄清 UTC 是什么
UTC 是协调世界时,全球共用的时间基准,由原子钟维持,以前常说的 GMT 格林尼治时间在日常使用里基本可以当成一回事。带 Z 结尾或者 +00:00 结尾的时间都是 UTC,这种写法来自 ISO 8601 标准。
换算规则一句话:北京时间等于 UTC 加 8 小时,反过来减 8。举例:UTC 00:00 对应北京 08:00;UTC 16:00 对应北京第二天 00:00,日期要跟着进位。减 8 出负数时日期往回退一天,比如北京 02:00 是 UTC 前一天 18:00。
几个常用场合的换法
- Excel:UTC 时间放 A1,用 =A1+TIME(8,0,0),或者写成 =A1+8/24,结果单元格设成日期时间格式
- Linux 查当前 UTC:终端敲 date -u,系统时区随便改,UTC 永远能对上
- 手机对照:时钟 App 里加一个城市叫协调世界时或 UTC,跟本地时间对着看最快
- 写代码:Python 用 datetime.now(timezone.utc) 取 UTC 时间,别拿本地时间直接算再硬改
- Unix 时间戳:它本身就是从 1970-01-01 00:00 UTC 起算的秒数,和时区无关,显示成字符串时才需要考虑时区
为什么建议一律存 UTC
系统要是有多地用户,服务器一律用 UTC 存储,展示时再按用户时区换算,能躲开夏令时和时区混乱的坑。数据库同理,建表时约定好时间字段存哪种,注释里写明白,省得后人猜。国内没有夏令时,固定加 8 就行;但跟海外对时间,对方可能正处在夏令时,加减几小时每年还会变,存本地时间迟早出错。
下次看到带 Z 的日志别再懵,心里默念加 8,日期记得跟着翻页就行。跨时区开会定时间,两边都要写清楚带时区的完整写法,只写一个 16:00,谁也说不准是哪边的 16 点。