地球自转一圈是 24 小时,但各地看到太阳最高点的时刻不一样。为了生活作息一致,人类把地球按经度切成 24 个时区,每个时区相差一小时。大家约定:以英国伦敦为起点的零时区作为世界时间基准,叫 UTC(协调世界时)。

中国全境统一用东八区,也就是 UTC+8:比伦敦早 8 个小时。所以北京时间中午 12 点,伦敦是当天凌晨 4 点。纽约属于 UTC-5(冬令时),比北京晚 13 个小时,北京晚上 10 点时纽约是当天早上 9 点。

这里有个几乎所有新手都会踩的坑:存储时间。如果你把「2026-09-22 12:00:00」这个字符串原样存进数据库,伦敦和北京读到的是同一个字符串,但对应的是两个不同的时刻。正确做法是存时间戳(一个绝对的秒数,全世界一致)或者带时区偏移的格式(比如 2026-09-22T12:00:00+08:00),显示时再转成用户本地的年月日。

另一个坑是「夏令时」。欧美不少国家夏天会把钟拨快一小时,导致那一年有个 23 小时的白天。如果程序按「每天固定 86400 秒」硬算,在夏令时切换那天会差一小时。中国目前不实行夏令时,但对接海外服务时要知道对方有这回事。

跨时区约线上会议是常见的现实问题:约的是「北京时间 20:00」,但对方在纽约,那就是对方早上 8 点。约定时间时最好直接说「北京时 20 点」,或者发一个带时区标注的时间。

实用建议:程序里所有时间一律存时间戳,只在展示层转本地时间;和人约时间,永远带上时区说明。