1970年1月1日が「エポックタイム」になるのはなぜですか。


456

なぜですか

1970年1月1日00:00:00

エポックタイムを考慮しましか?


21
なぜこれが主観的であると誰が思ったのかわかりません。「エポック」時間は、標準のタイムスタンプ方式です。
ConcernedOfTunbridgeWells

5
今日は38万時間前
mplungjan

21
私たちは今年44になりましたので、私たちは、この日付以降カウント時間を開始する必要があります
レオナルドRaele

3
今日、今、それは1499969999です!そのちょうど約。あと8時間!
Beco博士、2017

1
@LeonardoRaeleうん!それから、例えば、第二次世界大戦はBE 31年に始まりました!
Siavash Mortazavi

回答:


418

UNIXの初期のバージョンでは、システム時間を1/60秒間隔で測定していました。つまり、32ビットの符号なし整数は、829日未満の期間しか表すことができませんでした。このため、数字で表される時間0エポックと呼ばれます)れます)は、ごく最近に設定する必要がありました。これは1970年代初頭にあったため、エポックは1971-1-1に設定されました。

その後、システム時間は1秒ごとに増加するように変更され、32ビットの符号なし整数で表すことができる時間のスパンが約136年に増えました。カウンターから毎秒スクイーズすることはそれほど重要ではなくなったため、エポックは最も近い10進数に切り捨てられ、1970-1-1になりました。これは1971-1-1よりも少しすっきりしていると考えられていたはずです。

エポックとして1970-1-1を使用する32ビットの符号付き整数は、2038-1-19までの日付を表すことができ、その日付は1901-12-13にラップされることに注意してください。


30
1/60はアメリカの電力網の周波数と関係がありますか?
xtofl 2009

55
当時使用されていたシステムボード上の1つの発振器の周波数です。発振器はDCで動作するため、60Hzである必要はありませんでしたが、当時最も一般的なものを使用するのがおそらく安価で、テレビは当時大量生産されていました...
Matt Howells

18
実際、当時、コンピュータクロックとRTCは米国の主電源波形と同期することが非常に一般的でした。これは、プロセッサクロックを取得するために乗算され、RTCの秒を取得するために除算されました。
Alexios

12
@mafioso:そうです、ラップトップに2038 -... 1901-12-13のリマインダーを設定します。

18
@JediKnightこれは、開発者としての私自身の経験に基づく推測です。標準の変更には時間がかかり、変更が反映されない場合、競合する標準になります。エポック問題の実際の解決策は、64ビットの整数であり、エポックを時間的に進めません。
ジェイク

51

歴史

Unixタイムの最も初期のバージョンでは、32ビット整数が60 Hzのレートで増加していました。これは、初期のUnixシステムのハードウェアのシステムクロックのレートでした。結果として、一部のソフトウェアインターフェイスに60 Hzという値が表示されます。エポックも現在の値とは異なりました。1971年11月3日付の初版 Unixプログラマーズマニュアルでは、Unix時間を「1971年1月1日00:00:00からの時間、60分の1秒単位で測定」と定義しています。


1
エポック時間は1970年1月1日であり、1971
スティーブハリソン

10

http://en.wikipedia.org/wiki/Unix_time#Historyは、Unix時間の起源と選ばれた時代について少し説明しています。UNIX時間とエポック日付の定義は、現在の状態を安定させる前にいくつかの変更を経ました。

しかし、1970年1月1日が最終的に選ばれた理由は明らかにされていません。

ウィキペディアのページからの注目の抜粋:

初版「夜12時00分00秒からの時間、1月1日、などのUnixプログラマーズ・マニュアル1971年11月3日日付定義Unixの時間を1971秒のsixtiethsで測定し、」。

範囲が限られているため、レートが1 Hzに変更されてエポックが現在の値に設定される前に、エポックが複数回再定義されました。

現在の定義の複雑さを含む、後のいくつかの問題は、最初から完全に定義されているのではなく、使用法によってUnix時間が徐々に定義されていたことが原因です。


6

エポック参照日

エポック基準日は、我々は時間をカウントそこからタイムライン上の点です。そのポイントの前の瞬間は負の数でカウントされ、その後の瞬間は正の数でカウントされます。

使用中の多くの時代

1970年1月1日00:00:00がエポックタイムと見なされるのはなぜですか?

いいえ、エポック、エポック。あります使用されている多くのエポックが

このエポックの選択は任意です。

主要なコンピュータシステムとライブラリは、少なくとも数十のさまざまな時代のいずれかを使用しています。最も人気のある時代の1つは、一般的にUnix時間として知られています。、あなたが言及した1970 UTCの瞬間を使用しています。

人気はありますが、Unix Timeの1970年は 最も一般的。また、最も一般的なのは、無数のMicrosoft ExcelおよびLotus 1-2-3スプレッドシートの1900年1月1日、または世界中の数十億を超えるiOS / macOSマシンでAppleのCocoaフレームワークが無数のアプリで使用する2001年1月1日です。または、おそらく1980年1月6日、GPSデバイスで使用されていますか?

多くの粒度

システムによって、時間のカウントに使用される粒度が異なります。

いわゆる「Unix時間」でさえも、秒単位でカウントするシステムとミリ秒単位でカウントするシステムがあります。Postgresなどの多くのデータベースはマイクロ秒を使用します。Java 8以降の最新のjava.timeフレームワークなど、一部ではナノ秒を。一部はさらに他の粒度を使用します。

ISO 8601

エポック参照の使用と粒度には非常に大きなばらつきがあるため、一般的に、瞬間からのカウントとしての瞬間の通信を避けることが最善です。エポックと粒度のあいまいさ、および人間が意味のある値を認識できない(したがって、バグの多い値を見逃す)場合は、数値ではなくプレーンテキストを使用してください。

ISO 8601標準テキストとして日時値を表現するための実用的なうまく設計された形式の拡張セットを提供します。これらの形式は、機械で簡単に解析でき、文化を超えて人間が読みやすいです。

これらには以下が含まれます:


-10

短い答え:なぜでしょうか?

より長い答え:それを使用するすべての人がその価値に同意する限り、時間自体は本当に重要ではありません。1/1/70は長い間使用されてきたので、これを使用すると、できるだけ多くの人がコードを理解できるようになります。

異なるために任意のエポックを選択することには大きなメリットはありません。


37
Unixは1969年に開発され、1971年に最初にリリースされたため、1970-01-01-00:00:00より前のシステム時刻を表すマシンはないと仮定するのは合理的でした。
イェルクWミッターク

3
歴史的なシミュレーションゲームの開発者として、一部の時間オブジェクトの設計者は、すべてのプログラムが未来または最近の日付のみを表現することを望むと考える傾向があるのはかなりばかげているようです。もちろん、独自の表現をプログラムしたり、調整係数で作業したりできますが、それでもまだです。
ドロンツ2013

8
同じ前エポックの問題は、このようなビジネスのスプレッドシート、科学的データの提示、タイムマシンのUIなどとして、「実用的な」非ゲーム用途に適用される
Lenoxus

7
@Dronzこれは、論理ゲートにトランジスタとダイオードをCPUとして使用する9KBのRAMを備えた72000ドルのコンピューター用に設計されたものである(当時はチップなし)ことを考慮に入れる必要があります。ですから、最も基本的なものを機能させるのは「ばかげた」ことではありませんでした。
Camilo Martin

2
OPはメタレベルで正解です。私たちが時間をかけて計画したスキームは、常にかなり恣意的でした。1年の日数、1か月の日数、1年「0」、そして飛躍年の規則は...狂っています。すべてのシステムは、利用可能なテクノロジーを使用して実行できる最善の方法であり、すぐに使用できるように十分に機能したので、一連の厄介な妥協案にすぎません。これはすべてのエンジニアリングプロジェクトに当てはまります:)
2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.