--- title: 时间尺度 summary: UTC、TAI、TT 与 GPS,以及为什么时刻只存储在单一尺度上。 --- # 时间尺度 时间尺度是为时刻指定数值的规则。实际中同时使用多种尺度,它们并不一致,且差异足以影响指向与测距。本文档定义内核支持的各尺度,并给出消除运算歧义的存储约定。 ## 定义 | 尺度 | 全称 | 速率 | 参考 | |------|------|------|------| | UTC | 协调世界时 | 不均匀 | 民用时间,通过闰秒向 UT1 靠拢 | | TAI | 国际原子时 | 均匀 | 原子钟加权平均 | | TT | 地球时 | 均匀 | 地心坐标时 | | GPS | GPS 时 | 均匀 | 由 GPS 星座维持 | UTC 是此处唯一不均匀的尺度。它通过插入或删除整秒保持在 UT1(由地球自转定义的尺度)的 0.9 秒以内。包含插入秒的 UTC 分钟有 61 秒。 ## 数学含义 存储模型只有一个数:**TAI 尺度上的约化儒略日**。每个时刻在创建时都转换为 TAI,在显示时再转换回所需尺度。 原因在于精确性。两个以 TAI 存储的时刻之差为 ```text seconds = (tai_mjd_later - tai_mjd_earlier) * 86400 ``` 该差就是二者之间经过的 SI 时间,无论它们是以何种尺度创建的。若时刻以 UTC 存储,同样的减法在跨越闰秒插入时会出错,因为 UTC 时钟在该点没有单一明确的数值。 尺度之间的转换除 UTC 外都是常数偏移: ```text TT - TAI = 32.184 s (常数,IAU 2000) TAI - GPS = 19 s (自 1980 年起为常数) TAI - UTC = 10 s + (1972 年以来插入的闰秒数) ``` 前两项是常数。第三项是日期的阶跃函数,其数值来自 `apsis-leap` 中的闰秒表,即 IERS Bulletin C 发布的表。 ## 单位约定 - 时刻是约化儒略日,单位为天,自 1858-11-17 午夜起算。 - 时长单位为秒,指均匀经过的 SI 秒。 - 日历日期包含年、月、日、时、分,以及带小数的秒。在包含插入闰秒的分钟中,秒值可达 60.999。 ## 适用边界 闰秒表起始于 1972 年初,这是现代 UTC 体系的起点。早于该日期的 UTC 时刻在此没有精确表示,转换会返回空值而不是猜测。该表止于其中最新的一条记录;更晚的日期使用最后已知偏移进行转换,在下次插入之前是正确的,因此属于预测而非事实。 出于同样原因,远未来的日期也是预测。内核使其可见而非隐藏:未被覆盖的转换返回空值,由调用方决定如何处理。 ## 时长与日历运算 为时刻加上若干秒会使其恰好移动那么多经过时间。按日历方式加上一天是另一种运算:跨越闰秒插入时,一个 UTC 日历日为 86,401 SI 秒。内核只在时刻上暴露第一种运算,并要求转换为日历后才能进行第二种。这是有意为之,因为两者极易混淆,而误差小到在真正产生影响之前不易被察觉。 ## 表示方式对比 | 表示 | 速率均匀 | 闰秒 | 范围 | 此处用途 | |------|----------|------|------|----------| | TAI MJD | 是 | 不表示 | 广 | 存储与运算 | | UTC MJD | 否 | 表示为阶跃 | 1972 年起 | 输入与输出 | | 距某历元的 TAI 秒 | 是 | 不表示 | 取决于历元 | 时长 | | 日历字段 | 否 | 表示 | 不限 | 人机输入与显示 | | GPS 周与秒 | 是 | 不表示 | 1980 年起 | GNSS 接口 | ## 来源 - 儒略日与约化儒略日约定:IAU,见《天文年历解释性补充》。 - 地球时相对 TAI 的偏差:IAU 2000 决议 B1.9。 - 闰秒:IERS Bulletin C。 - 日历算法:Howard Hinnant,*chrono-Compatible Low-Level Date Algorithms*,2015。 ## 另见 - [[leap-seconds]]:表与插入规则 - [[calendar-and-mjd]]:日期转换 - 在线工具试用:*转换时间尺度*