web-dev-qa-db-ja.com

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

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

記述してください。

68

nix time。 の標準です

Unix時間、またはPOSIX時間は、1970年1月1日の真夜中の予測的協定世界時(UTC)から経過した秒数として定義された時刻を記述するためのシステムであり、うるう秒はカウントしません。

49
soldier.moth

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

質問は2つの誤った仮定をします。

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

ダースエポック

計算の時間は、常にではありません1970年の初めから追跡されます [〜#〜] utc [〜#〜] 。その Epoch は人気がありますが、数十年にわたるさまざまなコンピューティング環境では、少なくともほぼ ダースエポック が使用されています。一部は他の世紀のものです。 0年(ゼロ)から2001年までの範囲です。

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

紀元前1月0日、1

AD 1月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

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

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

エポック以降のカウントWhat

Epochからの時間追跡のもう1つの問題は、少なくとも4レベルの解像度が一般的に使用される時間単位です。

Diagram showing different software counting from Epoch by seconds, milliseconds, microseconds, or nanoseconds.

50
Basil Bourque

1970年1月1日00:00:00 amは、 POSIX時間 のゼロ点です。

5

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

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

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

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

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

そして...

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

天文学者は独自の画期的な日付を使用します: http://en.wikipedia.org/wiki/Epoch_(astronomy)

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

過去の日付は、一般的な場合の負の数を避けます。

よりスマートなパッケージの中には、予言的なグレゴリオ暦の1年目を使用するものがあります。
Calendrical Calculationsのような本に記載されている理由があります:それは数学的にわずかに単純です。

しかし、考えてみると、1/1/1と1/1/1970の違いはわずか1969で、些細な数学的オフセットです。

4
S.Lott

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

3
Friyank

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

A)できるだけ新しいもので、かつsome過去を含む必要がありました。多くの人が同じように感じているので、おそらく他の重要な理由はありませんでした。

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

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

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

2
Yezpahr

はい、C(およびその家族)。これは、Javaもそれを取りました。

0
Péter Török