01 / 时间戳:从地方日期到可比较的时刻
日志、数据库和跨机器消息需要比较先后,但“11 月 7 日下午 3 点”缺少年份和时区,日期字符串还有地区格式差异。Unix/POSIX 时间用 1970-01-01 00:00:00 UTC 作为参考点,让系统以数字交换时刻,再按地区规则呈现给人。纪元是约定,不是时间从那天开始。
秒和毫秒是接口约定,不是时间戳自带的属性。10 位秒和 13 位毫秒在当前年代常见,却不能据此推断所有历史或未来值。把秒误当毫秒会跑到 1970 年附近,把毫秒误当秒可能越界。本页显示单位并给建议,但不会偷偷更换单位。
负时间戳表示纪元之前,例如 −1 毫秒是 1969-12-31T23:59:59.999Z。时间戳也不是完美的全球序号:系统时钟可能校准、回拨或存在机器间误差;测量程序执行耗时应使用单调时钟,而不是直接相减两次墙上时钟读数。
02 / 时区名:把变化的规则留下来
UTC 偏移描述某一时刻与 UTC 的差值;时区描述某个地区随历史变化的一整套规则。地区会调整标准时间或采用夏令时,因此“纽约”不能永远写成 UTC−5。IANA 时区数据库记录地区规则,Asia/Shanghai、America/New_York 等名字让转换过程有明确依据。
同一时刻可以唯一映射到各地时间;反过来不总成立。2024 年纽约春季从 02 点跳到 03 点,02:30 不存在;秋季回拨后,01:30 出现两次。没有偏移的本地日期需要时区,并且有时还需要歧义策略。本页默认拒绝这些输入,只有明确选择偏早或偏晚时才处理;缺失时间会向相应方向调整。
时区数据库会更新,尤其未来规则可能改变。本页依赖浏览器提供的时区数据,不是独立在线权威数据库。固定偏移的 ISO 时间直接确定时刻;所选 IANA 时区仅影响显示,不覆盖字符串已有的偏移。
03 / 一天、24 小时与日历运算
“明天同一时间”和“24 小时后”不是同一个需求。夏令时前进或后退会让一个本地日历日实际只有 23 小时或多达 25 小时。订阅到期、每日提醒通常需要日历和地区规则;耗时统计需要两个确定时刻之间的实际经过时长。
2024-03-10 到 03-11 的纽约午夜只相隔 23 小时。本页间隔按两个时刻相减,天表示每 24 小时,不尝试推算“几个月”:月份长度不同,月底加月也有不同截断策略。先把需求说清楚,比选一种看起来方便的日期格式更重要。
ISO 8601 的 Z 表示 UTC,+08:00 表示固定偏移;不带偏移的日期不代表 UTC。本页不使用浏览器的宽松 Date.parse,不接受 11/07/2026 这类地区含义不明确的日期;日期格式明确,才能让复制、记录和交换保持一致。
2038、闰秒与精度:边界来自表示和约定
有符号 32 位秒计数的最大值是 2147483647,对应 2038-01-19T03:14:07Z;再加一秒无法放入同一有符号字段。这是旧系统的数据表示问题,不是 Unix 时间的统一终点。更宽的整数能解决容量问题,但单位、字段类型和语言转换仍需约定。
UTC 可以出现闰秒,而 POSIX 时间按每个日历日 86400 秒的模型计数,不能独立表达所有闰秒。系统可能使用不同的重复、暂停或平滑处理方案;简单时间戳相减不能充当严格的原子时标测量。本页不解析 :60,也不提供 TAI、GPS 或闰秒换算。
本页精度为毫秒:毫秒时间戳必须是整数,秒时间戳最多三位小数;支持 UTC 年份 0001–9999。计算采用 Temporal,导出 JSON 的时间戳和间隔使用字符串,避免下游隐式数值转换。内容不上传、不自动保存,当前时间取自设备,准确性取决于设备时钟。