web-dev-qa-db-ja.com

UnixエポックとGPSエポックの間のチック

Unixタイムエポック(1970年1月1日)とGPSタイムエポック(1980年1月6日)の間の1秒ティックの数は?

ウェブ上の複数のソースから複数の回答を見てきました。 1つのキャンプは答えが315964800であると主張し、他のキャンプはそれが315964819であると主張します。 315964800だといつも思っていましたが、今はよくわかりません。

私のソフトウェアベースラインは、過去8年間315964819を使用していることがわかりました。組み込みデバイスを他のデバイスと統合したときに、どのように19秒オフになるかを理解するのに苦労し、誰も気づきませんでした。

コードベースラインに315964819を入れた人は、誤ってTAIオフセット(19秒)を使用したに違いないと思います。

私の理解では、Unix時間にはうるう秒が含まれていません。これは、315964800が2つのエポック間のティック数であることを示します。次に、Unix時間がうるう秒をどのように処理するかを考えます。うるう秒が挿入されると、単純にティックカウントが繰り返され、1970年から1980年の間にwere19うるう秒が挿入されます...私はそうは思いませんが、このコードの歴史の中で誰かがそう考えたので、うまくいくように見えました...

長いことと短いことは、タイミングに関係するこの製品の暗黒時代の定数セットを変更しようとしています。これはプラットフォームにとって重要であり、以前の状態からより正確であると信じている状態まで、私よりも知識のある人からのある種の親指アップが欲しかった。

権限のある人がここに足を踏み入れることはできますか?

15964800キャンプ

15964819キャンプ

また、UnixエポックからGPSエポックについてのみ質問していることに注意してください。 GPS Epochが適切にカバーしてから、うるう秒が得られたと確信しています。

23
kmort

あなたが述べたさまざまな値は、1970年から1980年までのオフセットとうるう秒を混合することによって生じます。
正しいオフセット値は315964800秒です。

説明:

UTCとGPSの時間は、平均して18か月ごとに1秒ずつずれています。これはle秒と呼ばれ、UTCタイムベースで導入され、地球の自転の変化に対応するために必要です。

GPS時間はうるう秒で調整されません。

現在(2013)、16のオフセットがあります。
GPS時間-UTC = 16秒

Unix時間は時間形式ではなく、時間参照です。 UTC 1.1.1970以降のミリ秒(または秒)の数を表します。理想的には、システム時刻はTimeServer(NTP)によってUTCと同期されます。

変換してオフセットを取得するには、固定オフセットを使用する必要があります:(6.1.1980 UTC-1.1.1970 UTC)

次に、GPSの現在の値をUTC偏差に加算します(現在は16秒)。たとえば、その値を構成可能にするか、GPSデバイスから現在のオフセットを読み取ります(UTCとGPS時間の違いを知っています)

あなたが述べたさまざまな値は、1970年から1980年までのオフセットとうるう秒の混合によって生じます。それをしないで、それらを個別に処理します。

このJavaプログラム:

SimpleDateFormat df = new SimpleDateFormat();
df.setTimeZone(TimeZone.getTimeZone("UTC"));

Date x = df.parse("1.1.1970 00:00:00");
Date y = df.parse("6.1.1980 00:00:00");

long diff = y.getTime() - x.getTime();
long diffSec = diff / 1000;

System.out.println("diffSec= " + diffSec);

この値を出力します:

diffSec = 315964800

したがって、これはGPS Timeが開始された1.1.1970 UTCと6.1.1980 UTCの間の正しいオフセットです。それから、現在のUTC時間のGPS時間を計算するために、6.1.1980および今日から導入された16秒をさらに修正する必要があります。

24
AlexWien

私は3番目のキャンプにいると思います:)
次のように呼びましょう:
2,904,548,141,415,381,930「セシウム133原子の周期[...]」ジオイドでケルビン0度で測定。 (使用するTAI/SI定義に応じて、数億の期間を与えるか、またはかかります)

短い答え:

使用している時間スケール(およびそれらの時間スケールの定義)によって異なります。

15964809 TAI秒(1977年の定義)、したがってUTC秒
159648 UNIX秒
(両方とも互いに等しいが、指定した日付の間のみで、両方が2,904,548,141,415,381,930 "periods [...]"に対応する)
注意 UNIX秒はUTCうるう秒の完了後同じ秒を再生するため、UTC秒、2012-06-30 23:59:60 UTCおよび2012- UTCの07-01 00:00:00は、両方とも1341100800のUNIXタイムスタンプで表されていました。

詳細な回答:

TAI秒を使用
実際にはそうではありませんが、1977年以前のTAI秒はすべて、TAI/SI秒の1977/1997の定義に正確に等しいと仮定しましょう。
また、
「Unix時間エポック(1970年1月1日)」から「GPS時間エポック(1980年1月6日)」
もしかして
1970-01-01 00:00:10 TAIから1980-01-06 00:00:19 TAI
この場合、
(((365日/年* 10年)+ 2うるう日+ 5日)* 86400 TAI秒/日)+ 9 TAI秒
= 15964809 TAI秒

NIX秒を使用
実際にはそうではありませんが、1977年までのUTC秒の長さはTAI/SI秒の1977/1997の定義と正確に等しいと仮定しましょう。
また、
「Unix時間エポック(1970年1月1日)」から「GPS時間エポック(1980年1月6日)」
もしかして
1970-01-01 00:00:00 UTC〜1980-01-06 00:00:00 UTC
そしてそのUNIX時間は、うるう秒の完了後1秒スキップします
この場合、
(((365日/年* 10年)+ 2うるう日+ 5日)* 86400秒/日)+ 9うるう秒-9うるう秒うるう秒
= 159648 UNIX秒

「期間[...]」について
。 1997 SI秒は、セシウム-133の基底状態の2つの超微細レベル間の遷移に対応する放射の9,192,631,770周期の期間に等しいatom 0の温度での静止時K. 1977年のTAIの定義では、ジオイドでのSI秒を測定しています。

4
chimeraha

元の質問「Unix時間エポック(1970年1月1日)」から「GPS時間エポック(1980年1月6日)」に戻ると、エポックは315964800、315964819は「GPS時間エポック」に対する「TAIエポック」になります。つまり、315964819 = 315964800 + 19を意味します。したがって、コードで使用するエポック値は、実際に使用しているエポックの時間に依存します。

1
Long Jonathan