3.8 KiB
3.8 KiB
| title | tags | summary |
|---|---|---|
| 时间尺度 | 时间, utc, tai, tt, gps | UTC、TAI、TT 与 GPS,以及为什么时刻只存储在单一尺度上。 |
时间尺度
时间尺度是为时刻指定数值的规则。实际中同时使用多种尺度,它们并不一致,且差异足以影响指向与测距。本文档定义内核支持的各尺度,并给出消除运算歧义的存储约定。
定义
| 尺度 | 全称 | 速率 | 参考 |
|---|---|---|---|
| UTC | 协调世界时 | 不均匀 | 民用时间,通过闰秒向 UT1 靠拢 |
| TAI | 国际原子时 | 均匀 | 原子钟加权平均 |
| TT | 地球时 | 均匀 | 地心坐标时 |
| GPS | GPS 时 | 均匀 | 由 GPS 星座维持 |
UTC 是此处唯一不均匀的尺度。它通过插入或删除整秒保持在 UT1(由地球自转定义的尺度)的 0.9 秒以内。包含插入秒的 UTC 分钟有 61 秒。
数学含义
存储模型只有一个数:TAI 尺度上的约化儒略日。每个时刻在创建时都转换为 TAI,在显示时再转换回所需尺度。
原因在于精确性。两个以 TAI 存储的时刻之差为
seconds = (tai_mjd_later - tai_mjd_earlier) * 86400
该差就是二者之间经过的 SI 时间,无论它们是以何种尺度创建的。若时刻以 UTC 存储,同样的减法在跨越闰秒插入时会出错,因为 UTC 时钟在该点没有单一明确的数值。
尺度之间的转换除 UTC 外都是常数偏移:
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:日期转换
- 在线工具试用:转换时间尺度