導入
Posix 時間( POSIX タイムスタンプとも呼ばれます) は、主に POSIX 標準に準拠するシステムで使用される時間の測定値であり、その名前が付けられています。これは、うるう秒を除いた、 1970 年 1 月 1 日 00:00:00 UTC から日付を設定するイベントまでの経過秒数です (下記を参照)。これは時間のPOSIX表現です。
UNIX 時間は、一般にこの POSIX標準に準拠するUNIX類似のシステムで発生します。

POSIX時間

時間内のイベントを実数に関連付けます
イベントを実数に関連付けるには、自然かつ普遍的な参照を使用するだけで十分です。たとえば、地球の自転や太陽の周りの回転の周期などです。これらの周期性は、使用される参照を明確に定義するために何らかの努力が必要な場合でも、カレンダー、つまりイベントと日付の関係を確立するには十分です (各国には独自のものがあり、すべて異なる時期に採用されます)。これらのカレンダーの日付は、日、週、月、季節、年などを単位とするやや複雑な記数法で表現された数値にすぎません。Posix時間は、数式で表現されるものの中での単なる 1 つの基準ではありません。単純な数字の形式。
主な使用測定器
今日まで想像され、使用されてきた主な時間測定システムは次のとおりです。
| 頭字語 | 意味 | 意味 |
|---|---|---|
| GMT | 時間 手段 グリニッジ | 法的理由により、一部の国ではまだ使用されています。 しかし、この測定システムの定義は曖昧です。このため、この管理上の使用を除いて、UTC を使用することが望ましいのです。 |
| ユタ州 | 時間 ユニバーサル | このシステムでは、1 日を地球の地軸の周りの回転の平均継続時間として定義します。 この定義は、この自転の速度が一定ではなく、潮の干満の影響でゆっくりと減少し、さらに予測できない不規則性を示すため、いくつかの困難を引き起こします。UT 日の長さは、平均して非常にゆっくりと ( 1 秒より 1 秒程度) 増加します。 3年まで)。 UT にはいくつかのバージョンがあります: UT0、UT1、UT1R、UT2。詳しくは「世界時」の記事をご覧ください。 |
| タイ | 時間 アトミック 国際的 | このシステムは、秒の国際的な定義に基づいています。その標準は、世界中にあるいくつかの原子時計で構成されています。このシステムでの時間の測定は、その基準に同じ規則性がない以前のシステムとは異なり、厳密に規則的です。その結果、秒の減速によりTAIとUTは徐々に離れていきます。
|
| UTC | 時間 ユニバーサル 調整済み | このシステムは、多くの国で国際市民時間の基準として採用されています。 「調整された」という言葉は次のことを示します。
言い換えれば、UTC は整数秒以内まで TAI と同じ (安定性と精度がある) ため、 0.9 秒以内に UT に固執することができます。これは反対側の図が示しているものです。 |

時間の起源の選択
時間を測定するには、原点を選択する必要があります。
- POSIX 時間の原点は、1970 年 1 月1 日00:00:00 UTC に選択され、この日付は Posix 時間 0 に対応し、Posixエポック(Unix エポックとも呼ばれます) と呼ばれます。
時間の進化
この数値が時間の経過とともにどのように変化するかを示す必要があります。
- 1 秒が経過するごとに、POSIX 時間は 1 単位ずつ増加します。これは、IERS がうるう秒の追加 (または削除) を決定した場合を除き、年間を通じて常に増加します。以下の表は、2008 年 12 月 31 日午前 0 時に行われたうるう秒の追加の場合を示しています。
| # | タイ | UTC | タイ – UTC | ポシックス時間 | |
|---|---|---|---|---|---|
| 1 | 2009-01-01T00:00:30 | 2008-12-31T23:59:57 | 33 | 1,230,767,997 | |
| 2 | 2009-01-01T00:00:31 | 2008-12-31T23:59:58 | 33 | 1,230,767,998 | |
| 3 | 2009-01-01T00:00:32 | 2008-12-31T23:59:59 | 33 | 1,230,767,999 | |
| 4 | 2009-01-01T00:00:33 | 2008-12-31T23:59:60 | 33 | 1,230,768,000 | うるう秒を追加する |
| 5 | 2009-01-01T00:00:34 | 2009-01-01T00:00:00 | 34 | 1,230,768,000 | |
| 6 | 2009-01-01T00:00:35 | 2009-01-01T00:00:01 | 34 | 1,230,768,001 | |
| 7 | 2009-01-01T00:00:36 | 2009-01-01T00:00:02 | 34 | 1,230,768,002 |
Posix 時間は時間の線形表現ではなく、上の表の 5 行目のような異常があります。
UTC 時間と Posix 時間の間には 1 対 1 の対応関係はありません。後者では、上の表の 4 行目: 2008-12-31T23:59: 60 UTC のように、UTC に存在するうるう秒を表現することはできません。
2 つのイベント間の時間
これらの異なる参照は混合すべきではありません (たとえば、あるカレンダーのゼロ年が別のカレンダーのゼロ年と同時に始まることはありません)。また、たとえば、これらすべてのカレンダーが相互に非多重周期に適応する必要があるためです。閏年、またはこれらの周期の不規則性。これらの適応により、求める精度に応じて計算が少し複雑になります。たとえば、 1 年が経過しただけで十分な情報である場合もありますが、日数で表される同じ質問に答えるには、閏年の性質を考慮する必要がある場合もあります。これは、過去の記憶、つまり過ぎていく毎秒の記憶を保存しなければならないことを意味します。
ほとんどの場合、2 つのイベントが 1 つ以上のうるう秒にまたがらない限り、単純な Posix 時間の差で十分です。あらゆる状況で正確な遅延を計算するには、うるう秒を考慮する必要があります。
ただし、うるう秒の発生頻度は低いため、そのようなエラーが発生する可能性は低くなります。そして、すべてにもかかわらずこのような状況が発生した場合、誤差の振幅はおそらく小さく、この場合、これらのうるう秒について心配する必要はありません。以下の表にさまざまな例を示します。
この表の行を完成させる方法は次のとおりです。
- 対象となる 2 つのイベント間で計算された遅延が M 秒程度の場合、この間隔にうるう秒が存在する確率は、1 年の合計秒数 N に対して M になります (すなわち、うるう秒が次のように仮定されます)。毎年追加されます)、
- 1 年は N = 365 x 24 x 3,600 = 31,536,000 秒と数えます。
- したがって、エラーが発生する確率 1/M は M/N = Mx3.2×10 -8となります。
この方法を遅延 M=10、100、1000 に適用すると、次の表が得られます。
| 測定時間(分) | エラーの確率 | 誤差の大きさ |
|---|---|---|
| 10秒 | 3.2×10 -7 | 10% |
| 100秒 | 3.2×10 -6 | 1% |
| 1000秒 | 3.2×10 -5 | 0.1% |
最終的に、対象となる 2 つのイベント間の計算時間が 1 年である場合、3.2×10 -8のエラーが発生する確率は 100% になります。
特定のエラーが発生する確率とそのエラーの大きさは、互いに反比例して変化します。別の言い方をすると、次のように言えます。
- 計算された遅延が低い場合、エラーは大きくなる可能性がありますが、コミットされる可能性は低くなります。
- 計算された遅延が大きい場合、エラーが発生する可能性は高くなりますが、エラーは低くなります。
このペア (エラーが発生する確率 / エラーの大きさ) が受け入れられない場合、またはその影響を評価する方法がわからない場合は、なぜ UTC を使用するのか、何が必要なのかを自問する必要があります。必要な精度を確保するため、またはうるう秒の挿入/削除がプログラムされるとすぐに更新されるテーブルの使用を提供するためです。
UTC 時間を Posix 時間に変換する
うるう秒に関して前述した非常にまれな異常は別として、UTC 時刻を Posix 時刻に変換したり、その逆を変換したりすることは簡単です。
例: 2010 年 1 月1 日の一日の初めの Posix 時間は何時ですか:
- Posix 時代から 2010 年 1 月1 日まで、10 年の閏年を含めて 40 年が経過しました (以下のヘルプ表を参照)。
- つまり、それぞれ 24×3,600=86,400 秒の 14,610 日、
- Unix 時代からの経過時間は、うるう秒を除いて 1,262,300,400 秒です。
| 経過日数 | ||||
|---|---|---|---|---|
| 1,970 | 1,971 | 1,972 | 1,973 | 3*365+366 = 1461 |
| 1,974 | 1,975 | 1,976 | 1,977 | 1461 |
| 1,978 | 1,979 | 1,980 | 1,981 | 1461 |
| 1,982 | 1,983 | 1,984 | 1,985 | 1461 |
| 1,986 | 1,987 | 1,988 | 1,989 | 1461 |
| 1,990 | 1,991 | 1,992 | 1,993 | 1461 |
| 1,994 | 1,995 | 1,996 | 1,997 | 1461 |
| 1,998 | 1,999 | 2,000 | 2,001 | 1461 |
| 2,002 | 2,003 | 2,004 | 2,005 | 1461 |
| 2,006 | 2007年 | 2,008 | 2,009 | 1461 |
| 14,610 | ||||
Posix エポックからの秒数を日付に変換する次の bash スクリプトなど、これらの計算を非常に簡単に実行するツールもあります。
#!/bin/bash # Posix エポックからの秒数を # 今日までに変換 # 例: date -u -R --date "1970-01-01 1230768000 秒" date -u -R --date "1970 -01 -01 ${*} 秒"Posix 時間を UTC 時間に変換する
逆計算には何の困難もありません。同様に、日付を Posix 時代以降の秒数に変換する次の bash スクリプトなど、これらの計算を非常に簡単に実行するツールもあります。
#!/bin/bash # 日付を変換します (引数の形式に注意してください) # Posix エポックからの秒数に # 例: date --date "2009-01-01 00:00:00+00: 00" "+%s" 日付 --date "${*}" "+%s"