2016-09-23 20 views
3

私が読めるのlocaltimeにエポック時間を変換するためのコマンドをperlの下に使用しようとしています:2038年以下なぜperlは2038年にUNIXのタイムスタンプを変換できないのですか?

 bash-3.2$ perl -le print\ scalar\ localtime\ 32503651200 
     Thu Mar 9 19:13:52 1911 

を正しく変換することも可能であるが、年間の番号については、私は結果を期待することができませんでした2038年よりも大きく、 。

修正方法を教えてください。ありがとう。

+0

あなたのperlは6歳以上(5.12歳以上)ですか? – hobbs

答えて

0

Year 2038 problem

2038年問題は、時間値を記憶または符号付き32ビット整数として計算されたコンピューティングおよびデータ記憶状況に問題であり、この数は秒数として解釈され1970年1月1日00:00:00 UTC以来(「エポック」)。 1このような実装では、2038年1月19日の03:14:07 UTCの後の時刻をエンコードすることはできませんが、「Y2K問題」(「Millennium Bug」としても知られています)と同様の問題です。 1900年以降の年数は2000年以降をエンコードできませんでした。ほとんどの32ビットのUnixライクなシステムストアと、この「Unixの時間」の時間を操作する形式

+1

これは問題を説明しますが、それを修正する方法は説明しません。 – Schwern

7

year 2038 bug 32のビットシステムは、worked around in Perl 5.12.0(64ビットシステムは、2038年のバグの影響を受けない)でした。私は知っているので、I did it(助けを借りて)。 :)あなたのPerlをアップグレードするだけで、問題(と他の多くのもの)が解決されます。

また、DateTimeなどの日付ライブラリを使用してください。システム時間関数(2038バグのルート)に依存せず、y2038バグの影響を受けず、一般的にははるかに使いやすくなっています。あなたはPerlをアップグレードすることはできませんとlocaltimegmtimeを使用する必要がある場合

、あなたは2038年のバグの影響を受けない、これらの機能のバージョンを取得するためにTime::y2038を使用することができます。

+0

Schwern、これに感謝します。私は必要性を抽出し、Excelでそれらを変換します。説明ありがとう。 – Fehan

+3

@Fehan Excelはこれと何が関係していますか? – Schwern

関連する問題