什么是 TAI64 时间格式?

What is a TAI64 time format?

浏览 Logstash 日期插件文档时

https://www.elastic.co/guide/en/logstash/current/plugins-filters-date.html#plugins-filters-date-match

我遇到了 TAI64N 日期格式。

有人可以解释一下这个时间格式吗?

TAI代表Temps Atomique International,目前国际实时标准。一 TAI 秒被定义为对应于铯原子基态的两个超精细能级之间跃迁的 9,192,631,770 个辐射周期的持续时间。 TAI 还指定了一个参考系。

来自Toward a Unified Timestamp with explicit precision

TAI64 定义了一种 64 位整数格式,其中每个值标识一个特定的 SI 秒。 SI 秒的持续时间是通过铯原子状态转换的已知精确计数来定义的。时间结构为从公历 1970 年 1 月 1 日开始的秒数序列,当时原子时 (TAI) 成为实时的国际标准。该标准定义了 1970 年之前的 262 秒,以及从这个纪元开始的另外 262 秒,因此涵盖了大约 3000 亿年的跨度,对于大多数应用来说已经足够了。

扩展 TAI64N 和 TAI64NA 允许更精细的时间分辨率 在特定的秒内分别指特定的纳秒和阿秒(10-18s)。

虽然 TAI64 非常简单且一致,但它不仅需要扩展 关于精细分辨率,但在其他方面也是如此。

  • 它只关注时间点,但完整的时间模型还需要解决时间点和时间间隔之间的相互关系。大多数模型将间隔视为一组连续的时间点。这产生了明显的转换问题——假设一个密集的时域——假设持续时间为 0 的时间点数量不能产生持续时间大于 0 的间隔,即使最短的间隔也是一组无限数时间点。
  • TAI64 不解决时间方面的不确定性问题。
  • 强调时间测量的单调递增连续性。然而,人类对时间的感知是由不太规律的天文现象塑造的。

准确地说,由于各种原因,TAI64 格式更好,

  • 国际原子时
  • 严格单调(无闰秒)
  • 64 位 uint #seconds from epoch
  • 32 位 uint #纳秒 (TAI64N)
  • 32 位 uint #atto-seconds (TAI64NA)

您可以继续阅读,Bernstein D.J. 2002. "TAI64, TAI64N, and TAI64NA

TAI64, TAI64N, and TAI64NA

TAI and real time

TAI64 labels and external TAI64 format. A TAI64 label is an integer between 0 and 2^64 referring to a particular second of real time. Integer s refers to the TAI second beginning exactly 2^62 - s seconds before the beginning of 1970 TAI, if s is between 0 inclusive and 2^62 exclusive; or the TAI second beginning exactly s - 2^62 seconds after the beginning of 1970 TAI, if s is between 2^62 inclusive and 2^63 exclusive. Integers 2^63 and larger are reserved for future extensions. Under many cosmological theories, the integers under 2^63 are adequate to cover the entire expected lifetime of the universe; in this case no extensions will be necessary. A TAI64 label is normally stored or communicated in external TAI64 format, consisting of eight 8-bit bytes in big-endian format. This means that bytes b0 b1 b2 b3 b4 b5 b6 b7 represent the label b0 * 2^56 + b1 * 2^48 + b2 * 2^40 + b3 * 2^32 + b4 * 2^24 + b5 * 2^16 + b6 * 2^8 + b7.

For example, bytes 3f ff ff ff ff ff ff ff hexadecimal represent the second that ended 1969 TAI; bytes 40 00 00 00 00 00 00 00 hexadecimal represent the second that began 1970 TAI; bytes 40 00 00 00 00 00 00 01 hexadecimal represent the following second. Bytes 40 00 00 00 2a 2b 2c 2d hexadecimal represent 1992-06-02 08:07:09 TAI, also known as 1992-06-02 08:06:43 UTC.

source