UNIX秒、TAI(SI)秒、うるう秒、実際のコード

UNIX秒、TAI(SI)秒、うるう秒、実際のコード

私は最近UNIX Timeについて多くを読みましたが、そのほとんどは一貫しておらず矛盾していました。 UNIX Time(以下、UXT)、TAI、UTC間の変換を調整しようとしていますが、そのためにはUXTを正しく理解する必要があります。問題は、これを行う他の人が見つからないことです。

以下は、厳しい研究を通じて、数多くのソースから再構成された最良の説明です。何か間違ったこともあります。 以下の包括的な分析と点別検証/反論を求めています。デフォルトで正しく機能するには、次の内容を修正してください。


  1. TAIは鍛造の増加時間標準です。 SI秒単位で測定され、DSTとうるう秒を無視します。

  2. UTCはTAIと同じですが、天文の場合、基準UT1の0.9SI秒以内になるように整数潤滑SI秒(60秒で反映される時間文字列に変換)に変更されます。

  3. UXTはカウントです。UNIX秒1970年1月1日00:00:00 UTCから。一日は常に正確に86400秒です。ただし、UXTはUTCに関連しています。

  4. どうやってこれができますか?素晴らしい、UNIX秒はSI秒と異なる必要があります。、うるう秒は完全に規則的ではないため、UNIX秒は明確に定義された時間長にすることはできません。

  5. UTCからUXTへの変換UNIX仕様セクション4.15異なるUTC時間を同じUXTタイムスタンプにエイリアスとして割り当てます。UNIX秒をSI秒と効果的に等しくします(2つのSI秒、UNIXうるう秒を除く)。

    実際に何が起こっているのかはさまざまです。ほとんどのコンピュータはリモートサーバーに基づいて同期するため、同期中にうるう秒の更新を暗黙的に処理します。

  6. この意味は、各個別のUXTタイムスタンプをUTCに簡単に変換できることです(次を使用)。gmtimeあるいは、それぞれ§4.15)、何も調べるために算術を実行するために実際に使用することはできません。特に、difftimeUNIX 秒を返します。したがって、関連するうるう秒がすべてどこにあるかを知らない限り、他のタイムスタンプに追加することを含めることはできません。

ここまでは理解したようです。

  1. しかし、今実際のコードを見ると、これらのことはまったく行われません。私は人々が測定された期間を使用しdifftime、それが十分に良いことを望む(または問題があることを知らずに)理解することができますが、タイミングライブラリも間違っています。

    例として、libtaitai_now.c:7次のようにUXTからTAI()への変換を提供しますTAI := 4,611,686,018,427,387,914 + UXT。 TAIはSI秒を計算し、UXTはUNIX秒を計算するため、これを行うことはできません。しかし、libtaiうるう秒は明示的に扱われるので、これが不注意なエラーであると見るのは合理的ではありません。

    に限定されませんlibtai。この現象はどこでも見ることができます。

したがって、ポイント1~6はポイント7と一致しない。つまり、既存のコードの多くは、それが表す時間基準と矛盾します。 何が間違っていますか?

ベストアンサー1

問題は、ほとんどの文書があいまいな文章なしで時間スケールを区別できる語彙を使用しないことです。私はお勧めしますhttp://www.ucolick.org/~sla/leapsecs/picktwo.htmlこの問題の紹介として、歴史的使用法には互いに関連しない2種類の秒があります。 1つは地球の居住者のカレンダー日のセグメンテーションで、もう1つは特定の基準フレームで測定された一定の期間です。 1970年前後の日付にわたるすべてのタイムライブラリは、両方の秒を利用しようとし、最終的にarcsin(-2)を提供すると主張する関数と同様の答えを提供します。重要。

おすすめ記事