日付が1970年1月1日から計算されるのはなぜですか?


95

時間操作のデフォルト標準として日付(1970年1月1日)を使用する理由はありますか?私はこの標準をPythonだけでなくJavaでも見ました。私が知っているこれらの2つの言語。同じ標準に従う他の人気のある言語はありますか?

記述してください。


1
同じ標準に従うもう1つの一般的な言語はPHPです。これは、かなり一般的な時間の開始点です。
Greg K

回答:


65

Unix時間の標準です

Unix時間、またはPOSIX時間は、1970年1月1日の深夜の発作的協定世界時(UTC)から経過した秒数として定義される、うるう秒を数えない時点を表すシステムです。


5
KernighanとThompsonが、その瞬間を選択する理由を「私たちが構築を開始する少し前のラウンド数だ」と述べたかどうかを知っていますか?
dmckee ---元モデレーターの子猫2010

それは年の始まりであり、ゼロのタイムゾーン(ズールー)にあります。どちらも日付フォーマットコードを単純にします。
ドナルフェロー

28
うるう秒を数えませんか?私はその詳細を知りませんでした。少し考えてみると、なぜあなたがそのようにするのかわかりますが、それはわかります。私の世界は粉々になっています。24秒ずつ。
keturn 2010年

69

日付(1970年1月1日)をデフォルトの標準として使用

質問は、2つの誤った仮定を行います。

  • コンピューティングにおけるすべての時間追跡は、1970年以降のカウントとして行われます。
  • このような追跡は標準です。

2ダースエポック

コンピューティングの時間は、1970 UTCの初めから常に追跡されるわけではありません。そのエポックリファレンスは人気がありますが、数十年にわたるさまざまなコンピューティング環境では、少なくとも約24のエポックが使用されてきました。一部は他の世紀のものです。それらの範囲は0年(ゼロ)から2001年までです。

ここにいくつかあります。

紀元前1年1月0日

1月1日、AD 1

1582年10月15日

1601年1月1日

1840年12月31日

1858年11月17日

1899年12月30日

1899年12月31日

1900年1月1日

1904年1月1日

1967年12月31日

1980年1月1日

1980年1月6日

2000年1月1日

2001年1月1日

Unixエポックは一般的だが支配的ではない

1970年の初めは、おそらくUnixで使用されているため、人気があります。しかし、決してそれが支配的ではありません。例えば:

ISO 8601

count-since-epochがUnixエポックを使用していると仮定すると、バグの大きな脆弱性が開かれます。このようなカウントは人間が即座に解読することは不可能であるため、デバッグやロギングの際にエラーや問題に簡単にフラグを付けることはできません。別の問題は、以下に説明する粒度のあいまいさです。

代わりに、日付の値を、整数のカウント以降のエポックではなく、データ交換用の明確なISO 8601文字列としてシリアル化することを強くお勧めYYYY-MM-DDTHH:MM:SS.SSSZ2014-10-14T16:32:41.018Zます。

カウントは何エポック

カウント以降のエポックタイムトラッキングに関するもう1つの問題は、少なくとも4レベルの解像度が一般的に使用される時間単位です。


  • 元のUnix機能では秒単位が使用されていたため、32ビット整数として格納されている場合、1970年以降の秒数の制限に達すると2038年問題が発生します。
  • ミリ秒
    バンドルされているjava.util.DateクラスやJoda-Timeライブラリなど、古いJavaライブラリで使用されます。
  • マイクロ秒Postgres
    などのデータベースで使用されます。
  • ナノ秒
    新で使用さjava.timeパッケージのJava 8インチ

エポックから秒、ミリ秒、マイクロ秒、またはナノ秒でカウントするさまざまなソフトウェアを示す図。


1
現時点で支配的なエポックは何なのだろう...データに基づいていますか?
PascalVKooten 2018

1
@PascalVKooten多くの異なるエポックが多くの異なる環境やソフトウェアシステムで使用されています。したがって、支配的な時代はありません。ここでのポイントは、エポックを想定しないことです。データソースを把握します。最善のアプローチは、エポック問題を完全に回避し、ISO 8601文字列であるIMHOを使用することです。
バジルブルク2018

1
お返事をありがとうございます。たくさんあることは理解していますが、たとえばPOSIXが時間とともに人気を博したかどうか知りたいです。
PascalVKooten 2018

7

なぜ1970年1月1日なのか-「1970年1月1日」は通常「エポック日」と呼ばれ、Unixコンピュータの開始時刻であり、そのタイムスタンプは「0」とマークされています。その日付以降の任意の時間は、経過秒数に基づいて計算されます。簡単に言うと、任意の日付のタイムスタンプは、その日付と「1970年1月1日」との秒数の差になります。タイムスタンプは、「1970年1月1日」の数値「0」から始まり、増加する整数です1秒ごとに「1」を使用UNIXタイムスタンプを読み取り可能な日付に変換するために、PHPおよびその他のオープンソース言語には組み込み関数が用意されています。


5

時間操作の標準として日付(1970年1月1日)を使用する理由はありますか?

重要な理由はありません。

Pythonのtimeモジュール Cライブラリです。ケントンプソンに画期的な日付としてその日付を選んだ理由を尋ねます。多分それは誰かの誕生日だった。

Excelは2つの異なるエポックを使用します。Excelの異なるバージョンが異なる日付を使用する理由は何ですか?

実際のプログラマーを除いて、これらの種類の決定がなされた理由を誰も知ることはありません。

そして...

日付が選ばれた理由は関係ありません。それだけでした。

天文学者は独自のエポカルデートを使用します:http : //en.wikipedia.org/wiki/Epoch_( astronomy

どうして?数学がうまくいくように日付を選択する必要があります。任意のランダムな日付が機能します。

過去の日付は、一般的なケースでは負の数を避けます。

よりスマートなパッケージの中には、グレゴリオ暦の1年目を前向きに使用するものがあります。
カレンダー計算のような本で与えられた理由があります:それは数学的にわずかに簡単です。

しかし、それについて考えると、1/1/1と1/1/1970の違いは1969であり、わずかな数学的オフセットです。


1
1/1/1が選択された場合、今では秒(2 ^ 31)が不足していることになります。現状では、2038年に32ビットオペレーティングシステムのY2Kのような問題に直面しています。 en.wikipedia.org/wiki/Year_2038_problem
Chris Nava

1
@Chris Nava:秒ではなく、1/1/1カウント日を使用する人々。20億日は約500万年です。多くの場合、時間分解能を最大化するために(日、時間)ペアを保持します。ほとんどの日に86400秒しかありません。
S.Lott、2009年

@ S.Lott:はい。ほとんどのソフトウェアはエポックから数分ではなく数秒を数えるので、1/1/1はこれまでのところ妥当な開始日であると指摘していました。したがって、より最近の日付がコンピューターの時代として(そして関連してIT革命の始まりとして;-)選ばれました
Chris Nava

@クリス・ナヴァ:「ほとんど」?「ほとんど」とは「Linux」を意味すると思います。他のOSはLinuxのように動作しません。問題は、「合理的」で「なぜ1970年1月1日なのか」ということです。答えるのは簡単な質問ではありません。最も重要なのは、答えは重要ではないということです。「合理的」真のですが、それは理由ではないのです理由。その理由はなぜのみケン・トンプソンが答えることができるものです。
S.Lott、2009年


2

Q)「なぜ日付は1970年1月1日から計算されるのですか?」

A)できるだけ最近である必要がありますが過去も含まれいます。多くの人が同じように感じているので、他の重要な理由はほとんどありませんでした。

彼らはそれをあまりにも遠くに置くと問題を引き起こすことを知っていましたし、将来にあるとそれが否定的な結果をもたらすことを知っていました。イベントは将来発生する可能性が最も高いため、過去を深く掘り下げる必要はありませんでした。

注: 一方、マヤ人は長期にわたるカレンダーを作成するために過去のことを多く知っていたため、イベントを過去に置く必要がありました。すべての日常的な現象をカレンダーに配置するだけです。

タイムスタンプはカレンダーではなく、エポックです。そして、私はマヤ人が同じ視点を使って彼らの長期カレンダーを作ったと思います。(彼らは過去と何の関係もないことをよく知っていることを意味し、彼らはそれをより大きなスケールで見る必要があっただけです)


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.