• ベストアンサー

UNIX EpochはTAIでの何秒でしょうか?

UNIX EpochをTAI(国際原子時)で表現した場合、何秒にあたるのでしょうか? UNIX時刻とTAIの相互変換をするために両者の時間差を知りたいです。 UNIX時刻では閏秒は無視されるので、UNIX時刻は(GPS時刻のように)TAIとは固定時間差で進行していることになりますが、UNIX時刻とTAIの差が何秒なのか、情報を見つけられずにいます。

質問者が選んだベストアンサー

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8653/18507)
回答No.6

> UNIX時刻の起点である1970/01/01 00:00:00をTAI(1958/01/01 00:00:00からの秒数)に換算したらいくつなのか 1972/01/01 00:00:00(UTC)は1972/01/01 00:00:10(TAI)です。1958/01/01 00:00:00からの秒数でいえば441,763,210秒です。 UNIX時刻の基点は,単純にはここから2年=730日=63,072,000秒だけさかのぼればいいはずですが,このころのTAIの1秒はUTCでの1.0000000300秒と決められていました。さらに1972/01/01 00:00:00(UTC)になる直前の時点で特別に(TAI秒で)0.107758秒だけUTCを遅らせたという事情がありました。 したがって1970/01/01 00:00:00(旧UTC。1971年末までは旧UTCです)には,1972/01/01 00:00:00(UTC)から63072000*1.00000003+0.107758=63,072,001.999918秒だけさかのぼらねばなりません。 UNIX時刻の基点1970/01/01 00:00:00(旧UTC)は441,763,210-63,072,001.999918=378,691,208.000082秒(TAI)ということになります。 もし,もっと前の時刻までさかのぼりたければ http://ja.wikipedia.org/wiki/%E5%8D%94%E5%AE%9A%E4%B8%96%E7%95%8C%E6%99%82 の旧協定世界時の周波数オフセットとステップ調整という表に周波数オフセットとステップ調整が載っています。この表を使って1961年初までさかのぼれば1961/01/01 00:00:00(旧UTC)は1961/01/01 00:00:01.422818(TAI)=94,694,401.422818秒であることが確認できるでしょう。 周波数オフセットの数値がTAIの1秒がUTCでの何秒に相当するかを示しており,ステップ調整はそれが挿入された時点で旧UTC時刻がジャンプしたことを示しています。

woghArhak5
質問者

お礼

詳細な説明ありがとうございました。理解をするのに時間がかかりそうですが、必要な情報は出揃ったように感じていますのでクローズさせて頂きたいと思います。

すると、全ての回答が全文表示されます。

その他の回答 (5)

  • f272
  • ベストアンサー率46% (8653/18507)
回答No.5

> ここには「閏秒を無視する」と書かれています。これについてはどう思われますか? 言い方がおかしかったかな。言いたいのは以下のようなことです。 UTCで1986年12月31日23時59分59秒では,UNIX時刻では536457599秒と数えます。(A.4.14 Seconds Since the Epochに書いてある通り。)実際に,1986年12月31日は1970年1月1日から6209日後(両端を含む)です。そうすると6209*86400-1=536457599ですとなってUNIX時刻と一致します。この間に閏秒は13秒挿入されていますから,TAIでは536457612秒後と数えられているはずですが,UNIX時刻では536457599秒です。そして,これをUNIX時刻では1986年12月31日23時59分59秒と解釈するのです。これがUNIX時刻では閏秒を無視するという意味であり,TAIとは違います。 > 6.1972年以降でUTCに閏秒が挿入されるとき、TAIで2秒進むときにUTCでもUNIX時刻でも1秒しか進まない。1秒の長さはすべて共通であるから、これ以降はUNIX時刻は、UTCと同じだけTAIからずれていく。 と書いたとおりですね。 http://ja.wikipedia.org/wiki/UNIX%E6%99%82%E9%96%93には以下の例が書かれています。本当の経過秒数というのがTAIに相当する時刻ですね。 UTC______________本当の経過秒数__UNIX時刻 1998-12-31T23:59:59 915148820 915148799 1998-12-31T23:59:60 915148821 915148800 1999-01-01T00:00:00 915148822 915148800 1999-01-01T00:00:01 915148823 915148801

woghArhak5
質問者

お礼

> 本当の経過秒数というのがTAIに相当する時刻ですね。 TAIは1958/01/01 00:00:00が0秒で、UNIX時刻は1970/01/01 00:00:00が0秒なので、「本当の経過秒数というのがTAI」というのは奇異な気がします。 「相当」という語句の意図が、TAIをUNIX時刻に換算した結果という意味であれば理解できますが、それでは「本当の経過秒数」をTAI(1958/01/01 00:00:00からの経過秒数)に換算した結果はいくつなのでしょうか。 元々の質問の「UNIX EpochをTAI(国際原子時)で表現した場合、何秒にあたるのでしょうか?」は、言い換えると「UNIX時刻の起点である1970/01/01 00:00:00をTAI(1958/01/01 00:00:00からの秒数)に換算したらいくつなのか」という意図でした。 もっと言うと、UNIX時刻の起点である1970/01/01 00:00:00をTAI(1958/01/01 00:00:00からの秒数)に換算するアルゴリズムが知りたいのです。

すると、全ての回答が全文表示されます。
  • f272
  • ベストアンサー率46% (8653/18507)
回答No.4

#1です。 検討した結果をまとめます。 1.TAIで1961年1月1日00:00:01.422818がUTCで1961年1月1日00:00:00.000000になる。 2.TAIで1970年1月1日00:00:08.000082がUTCで1970年1月1日00:00:00.000000になる。 3.UTCの1970年1月1日00:00:00.000000が、UNIX時刻の0である。つまりTAIで1970年1月1日00:00:08.000082である。 4.UNIX時刻の1秒ははっきりとは定義されていないようだが、UTCの1秒と同じと考えられる。これは1971年までのTAIの1秒とは異なるが、1972年以降のTAIの1秒とは同じである。 5.したがってTAIで1972年1月1日00:00:10.000000が、UTCの1972年1月1日00:00:00.000000であり、UNIX時刻の1972年1月1日00:00:00でもある。 6.1972年以降でUTCに閏秒が挿入されるとき、TAIで2秒進むときにUTCでもUNIX時刻でも1秒しか進まない。1秒の長さはすべて共通であるから、これ以降はUNIX時刻は、UTCと同じだけTAIからずれていく。 7.その結果として現在(2014年12月19日)ではUNIX時刻はTAIよりも35秒遅れている。 > UNIX時刻は(GPS時刻のように)TAIとは固定時間差で進行していることになりますが これは誤りです。UNIX時刻は(大多数のシステムでは)UTCと同じように進行します。ただしtz databaseを用いて本当の経過秒数に基づく時刻の方式に切り替え可能であるが、この検討ではそういうシステムを対象としなかった。

woghArhak5
質問者

お礼

>> UNIX時刻は(GPS時刻のように)TAIとは固定時間差で進行していることになりますが > > これは誤りです。UNIX時刻は(大多数のシステムでは)UTCと同じように進行します。 「UNIX時刻」と表記したのは以下の文書の「A.4.14 Seconds Since the Epoch」を意図していまして、ここには「閏秒を無視する」と書かれています。これについてはどう思われますか? http://pubs.opengroup.org/onlinepubs/009604599/xrat/xbd_chap04.html なお、ご回答の前半部分の時刻比較説明についてはまだ理解できていませんので、また改めて質問するかもしれませんが、ひとまずありがとうございました。

すると、全ての回答が全文表示されます。
  • f272
  • ベストアンサー率46% (8653/18507)
回答No.3

#1です。 計算してみた結果,-8.000082秒遅れだね。 TAIで1961年1月1日00:00:01.422818がUTCで1961年1月1日00:00:00.000000になる。 1961年1月1日-1.422818 1962年1月1日-1.845858 1963年1月1日-2.255826 1964年1月1日-2.765794 1965年1月1日-3.440130 1966年1月1日-4.313170 1967年1月1日-5.259250 1968年1月1日-6.205330 1969年1月1日-7.054002 1970年1月1日-8.000082 1971年1月1日-8.946162 そして 1972年1月1日-9.892242秒遅れになるはずだが 1972年1月1日に-0.107758秒の特別調整をいれて,結局 1972年1月1日-10.000000秒遅れになった 数値は正確です。丸めていません。

woghArhak5
質問者

お礼

UTCではなく『TAI』についてご教示願えませんでしょうか。

すると、全ての回答が全文表示されます。
  • f272
  • ベストアンサー率46% (8653/18507)
回答No.2

#1です。 間違えた。UTCが今のようになったのは1972年からだったね。1970年のときを求めるのはオフセットを累積しなくてはいけないんだね。

woghArhak5
質問者

お礼

UTCではなく『TAI』についてご教示願えませんでしょうか。

すると、全ての回答が全文表示されます。
  • f272
  • ベストアンサー率46% (8653/18507)
回答No.1

http://jjy.nict.go.jp/mission/leapsecond9.jpg 10秒差だよね。 UNIX時刻は,UNIXエポックつまりUTCでの1970年1月1日午前0時0分0秒からの経過秒数 UTCでの1970年1月1日午前0時0分0秒では,UTCはTAIよりも10秒遅れている

woghArhak5
質問者

お礼

UTCではなく『TAI』についてご教示願えませんでしょうか。

すると、全ての回答が全文表示されます。

関連するQ&A