日付 - 115年以上前に戻るか、5879565年後の未来に行くことはできません。

日付 - 115年以上前に戻るか、5879565年後の未来に行くことはできません。
  • タイムゾーン= CEST
  • 日付(GNU coreutils)8.32
date -d "115 years ago"
Di 11. Aug 13:37:54 CET 1908
date -d "116 years ago"
date: invalid date ‘116 years ago’

質問

  1. 115 years追加返品可能ですか?過去または5879565 years入力未来
  2. なぜこれが起こり、エラーが発生するのですか?この奇数はどこから来るのでしょうか?
  3. なぜdate -d "200 years ago 14 Mar "突然仕事ができるのでしょうか?

ベストアンサー1

時間と日付を計算するほとんど互換性のある方法がたくさんあります。

「伝統的な」Unix時間は、1970年(「エポック」とも呼ばれる)以降の秒を計算します。一つある大きな問題32ビット表現では、2038年1月19日火曜日に整数オーバーフローが発生します()date -d "@$((0x7fffffff))"

より「現代的な」アプローチは、64ビットカウンタでナノ秒を計算することです。

GNU coreutils 'date' は日付解析を委任します。DateTime2.yの解析、これは2500行のバイソンコードです。動作は環境によって異なります。たとえば、coreutils 8.32では、CygwinとUbuntuの両方が同じソースでコンパイルされているにもかかわらず、さまざまな動作が発生します。また、coreutils 8.2264ビットCentOS7で実行されており、「20000000000年前」から「20000000000年前」までの日付を受け入れます。

とにかく - 実装によって異なりますdate

以下を追加するように編集されました。

Philip Coulingはいくつかの発見をしました。タイムゾーンを合わせるのは難しいです。

また必ずお読みくださいプログラマーの時間に関する誤解。時間は単純なトピックのように見えるかもしれませんが、正しい時間を確保するのは難しいかもしれません。

おすすめ記事