開発者ツール · Unix タイムスタンプ コンバータ
UTC、GMT、TAI: タイムスタンプが実際にカウントしているのはどれですか
· 背景
タイムスタンプ unix-time タイムゾーン
GMT、UTC、TAI は同義語として扱われることがよくありますが、これらは異なる歴史を持つ 3 つの異なるものです。この投稿では、それぞれについて説明し、Unix 時間と日常のコンバーターが実際に従うのはどれかを説明します。
1 つのサーバー上の 3 つの名前 — 日付ヘッダーの GMT、ログの UTC、研究論文の TAI、すべて同じ秒
サーバーは、あるプロトコルでは「GMT」、ログでは「UTC」、科学データでは別の時間スケールを表示できます。同様の時計ラベルには互換性がありません。最初のタスクは、プレゼンテーション層内のすべての名前を UTC に変更するのではなく、各フィールドの背後にあるコントラクトを識別することです。
ToolAcre の規約は明示的です。Unix の秒またはミリ秒は、ISO 8601 UTC 文字列、読み取り可能な UTC 行、およびブラウザーのローカル行になります。スケールセレクターはありません。 Unix 以外のカウントは、このルートが関連する前に、独自の権限のある定義を使用して変換する必要があります。
便利なインベントリには、すべてのフィールドの横にスケールとシリアル化が記録されます。特にデータが科学システムと応用システムを横断する場合、同様のラベルが出所を消去してはなりません。
グリニッジ標準時 — 子午線における平均太陽時、世界の基準としての歴史、そしてそれが現在標準ではなくタイムゾーンである理由
概要では、グリニッジ標準時の歴史と現代の法的使用法について説明しました。これらの事実は、コンバータの構成、ソース、またはテストには存在しません。したがって、この記事はコード リポジトリを推論によって歴史的な引用に変えるものではありません。
操作上、入力に GMT が示されている場合は、定義されているプロトコルを検査します。通常のアプリケーション日付と同等に見えるクロック ラベルでも、特定の文法またはポリシー要件を伝えることができます。 ToolAcre は UTC ラベルを出力するため、GMT パーサーまたはフォーマッタとして表示しないでください。
相互運用性が用語に依存する場合は、コードレビューで制御仕様をリンクします。表示ラベルがワイヤフォーマット要件を黙って代役するべきではありません。
GMT 履歴と法的地位はリポジトリの証拠の外にあります
UTC 行は、`Intl.DateTimeFormat` と `timeZone: "UTC"` によって生成されます。 ISO 行は `toISOString()` から取得されます。これらの呼び出しは、このインターフェイスがその普遍的な読み取りをどのようにラベル付けしているかを証明しています。 UTC がいつ採用されたのか、あるいはその背後にある制度的メカニズムについては文書化されていません。
デバッグの場合、ラベルは現在のローカル ゾーンから独立した共有参照を確立するのに十分です。システム間で ISO 文字列またはエポック値を比較します。情報源が別のスケールを使用している場合は、よく知られた日付が同一のカウントを意味すると仮定するのではなく、まずその関係を証明してください。
標準 UTC 出力は、ローカル ゾーンの選択を削除するため、環境を比較する場合に特に役立ちます。ただし、宣言されていないタイム スケールからの入力は変換されません。
コンバーターは UTC にラベルを付けますが、UTC の定義の歴史を文書化しません。
国際原子時は、コード、構成、テストでは表現されません。ここでは、現在のオフセット、履歴ギャップ、または変換アルゴリズムは表示されません。このような定数をメモリから供給することは、まさにこのタスクで禁止されている種類の微妙な時間要求になります。
信頼できるライブラリまたはソースが日付の変換を実行するまで、TAI ラベルの付いた値を TAI として保存します。これを Unix 秒として直接貼り付けると、間違った原点またはスケールがサイレントに適用され、洗練された ISO 文字列が得られる可能性があります。可読性は検証ではありません。
外部変換では、変数名と型名にスケール名を含める必要があります。演算前にそのラベルを消去すると、後でもっともらしい ISO 結果を監査できなくなります。
TAI が実装されていないため、ギャップや変換定数はアサートされません
テストされた Unix モデルは、`2016-12-31T23:59:59Z` のエポック値 1,483,228,799 から深夜の 1,483,228,800 まで進みます。 `23:59:60` に対する個別の入力はありません。これが、この実装における POSIX スタイルの動作の具体的な意味です。
コンバーターは、そのルールに基づいて Unix カウントを UTC ラベル付きの民間出力にマッピングすると考えるのが妥当です。この整数を歴史上のすべての飛躍にわたる正確なアトミック秒数と呼ぶのは誤解を招きます。このツールは、実験室での時間スケールの測定ではなく、ソフトウェアで日付を作成します。
区別は微妙ですが実用的です。シーケンス計算は Unix の規則を継承しますが、民間の表示は Date および Intl 形式を継承します。どちらのパスもアトミック時間メタデータを公開しません。
テストされた Unix モデルは、うるう秒値を使用せずに、POSIX スタイルの秒を UTC ラベルにマッピングします。
ワークブックの HTTP および英国法定時間の例では、外部プロトコルと法的ソースが必要です。それらは省略されています。ヘッダーまたは規制されたレコードを実装するときは、口語的な同等性に基づいて UTC または GMT の表現を選択するのではなく、実際の仕様に従ってください。
このモジュール内では、`GMT` がゼロ オフセットに対する Intl のショート オフセット レンダリングの一部として表示される場合がありますが、これはフォーマッタ出力であり、プロトコル日付を生成することを約束するものではありません。 UI 表示をワイヤ形式のシリアル化や法律用語から切り離してください。
ゼロ オフセット ラベルを返すフォーマッタは、プロトコルの検証としては不十分です。専用のパーサーとフィクスチャを使用して、シリアル化された完全なヘッダーまたは規制されたレコードをテストします。
GMT のプロトコルと法的使用には外部ソースが必要なので省略されています
GPS 時間と天文日付スケールは、受け入れられるモードの範囲外です。 UI は秒、ミリ秒、または自動検出のみを提供し、サポートされている両方の単位は Unix エポックを想定しています。原点またはリープ規則を変更するチェックボックスはありません。
別のスケールからの数値には、取り込みと保存を通じてラベルが付けられる必要があります。専用のソースメソッドで変換し、オリジナルを保持します。このパネルには、派生した Unix 値のみが属します。そうしないと、もっともらしい結果が根本的な不一致を隠してしまう可能性があります。
サポートされていないスケールを拒否する方が、推測された定数を提供するより安全です。時間スケールのオフセットは日付に依存する可能性があり、ここでの誤った精度により科学的観測の順序が変更される可能性があります。
GPS および天文スケールは受け入れられないモードです
ToolAcre のユニバーサル行を参照するときは、UTC と言ってください。これは、ソースが要求し、UI がラベル付けするものであるためです。数値入力の場合は Unix 秒またはミリ秒と言います。 UTC、GMT、およびアトミック時間を同義語に分解する広範なステートメントは避けてください。
命名精度はデバッグ ツールです。どの変換が必要か、どの主張が未検証のままかを特定します。このコンバータは、1 つのパス (Unix カウントから UTC/local 表示へ) については強力な証拠を提供しますが、無関係なスケールについては意図的に何も提供しません。
ドキュメントを作成するときは、各用語を具体的なフィールドまたはフォーマッタに付加します。 Vague は、3 つすべてが「同じ時間を意味する」ことで、正確な変換責任が隠蔽されていると主張しています。