[6] [DFN[TAI64]] は、 [[djb]] が用いている[[日時形式]]です。
[[TAI]] における1970年1月1日0時0分0秒からの経過を表す[[整数時刻系]]です。

* 仕様書

[REFS[
- [1] ([TIME[2000-02-29 11:01:50 +09:00]])
<https://cr.yp.to/libtai/tai64.html>
- [2] ([TIME[2000-02-29 11:01:48 +09:00]])
<https://cr.yp.to/daemontools/tai64n.html>
- [3] ([TIME[2000-03-05 07:03:59 +09:00]])
<https://cr.yp.to/daemontools/tai64nlocal.html>
- [4] [CITE[TAI64]]
([TIME[1999-08-30 03:53:44 +09:00]])
<https://cr.yp.to/proto/tai64.txt>
]REFS]

* 形式

[7] [[秒]]単位の [[TAI64]] の他に、[[ナノ秒]]単位の [DFN[TAI64N]]、
[[アト秒]]単位の [DFN[TAI64NA]] があります。

[13] それぞれ内部形式により保持するデータを
「TAI64 label」のように呼び、[[情報交換]]用の記述形式を
「external TAI64 format」のように呼んでいます。 

[14] external format
は[[大エンディアン]]の[[16進数]]表記の[[数値]]列となっています。

* 応用

[8] [[qmail]] や [[daemontools]] などの [[djb]] 製品で使われています。

[16] [CITE[TAICLOCK]], [TIME[1997-08-14T22:55:16.000Z]], [TIME[2023-04-02T11:16:59.459Z]] <https://cr.yp.to/proto/taiclock.txt>


[15] それ以外では滅多に見かけません。

* 評価

[11] 多くの[[日時形式]]は究極的には [[UTC]] をベースにしていますが、
[[TAI64]] は [[TAI]] をベースにしている珍しい例です。

[9] [[daemontools]] では[[ログファイル]]の正確な[[日時]]の記録のために使われていますが、
通常の[[テキストファイル]]としての表示により[[人間]]が[[日時]]を読み取ることができないため、
システム管理者の [[daemontools]] の評判を落とす一因ともなっています。

[10] [[Unix]] で動作する製品でよく使われるにも関わらず、
[[Unix]] が採用する[[閏秒のない時刻系]]ではなく、
[[TAI]] を採用しています。そのため [[Unix time]] との換算
(ひいては [[UTC]] や各国[[標準時]]との換算) は単純な計算では行えず、
[[閏秒]]の表が必要となります。
[[Unix]] など[[閏秒のない時刻系]]で動作する (ほとんどすべての)
[[プラットフォーム]]上で本形式を扱うには、
定期的に[[閏秒]]表を[[更新する仕組み][ロケールの更新]]が必要です。

;; [12] 異なる[[閏秒]]表を持ったシステムで他の[[日時形式]]と換算すると、
異なる結果になっているおそれがあります。


* その他の TAI 元期の Unix time 変種

[17] 
[[Unix time]] の[[元期]]は [[UTC]] で定められていますが、 [[TAI]] に差し替えたのが
[[TAI64]] です。

[18] 
[[TAI64]] 以前にも同様のものがあったようです。

[FIG(quote)[
[FIGCAPTION[
[28] ([TIME[2001-11-11 14:06:55 +09:00]])
<http://cr.yp.to/proto/utctai.html>
]FIGCAPTION]

> What is the epoch? Originally it was defined as the beginning of 1970 GMT. GMT, Greenwich Mean Time, is a traditional term for the time zone in England. Unfortunately, it is ambiguous; it can refer to a variety of astronomical time scales.
> Arthur David Olson's popular time library uses an epoch of 1970-01-01 00:00:10 TAI.

]FIG]

[19] [[djb]] はこれに倣って [[TAI64]] を定義したということでしょうか。

[20] Olson の時刻ライブラリーというのは [[tzcode]] のことなのでしょうか?

-*-*-

[47] 
[[PTP]] の[[元期]]も[TIME[西暦1970年1月1日0時 TAI][1970-01-01T00:00:00]]です。



* メモ

[FIG(quote)[
[FIGCAPTION[
[5] ([TIME[2000-02-29 11:01:48 +09:00]])
<https://cr.yp.to/daemontools/tai64n.html>
]FIGCAPTION]

> tai64n reads lines from stdin. For each line, it writes
> an @,
> a precise timestamp,
> a space, and
> a copy of the input line
> to stdout. The timestamp indicates the moment that tai64n read the first character of the line.

]FIG]
