Bash - 日付、32ビットLINUXシステムのバグ2038を修正

Bash - 日付、32ビットLINUXシステムのバグ2038を修正

私は偶然発見した小さなbashスクリプトを書いた。「2038年のエラー」。以前は、この問題について知りませんでした。スクリプトがこの魔法の日付(2038年1月19日03:14:07 UTC)を計算しようとしたときに得られた--debug出力を自由に投稿しました。date

date -d "20380119"

date: parsed number part: today/this/now
date: input timezone: +01:00 (set from system default)
date: warning: using midnight as starting time: 00:00:00
date: starting date/time: '(Y-M-D) 2038-01-19 00:00:00 TZ=+01:00'
date: '(Y-M-D) 2038-01-19 00:00:00 TZ=+01:00' = 2147468400 epoch-seconds
date: output timezone: +01:00 (set from system default)
date: final: 2147468400.000000000 (epoch-seconds)
date: final: (Y-M-D) 2038-01-18 23:00:00 (UTC0)
date: final: (Y-M-D) 2038-01-19 00:00:00 (output timezone TZ=+01:00)
Tue Jan 19 00:00:00 CET 2038

date -d "20380119 + 1 days"

date: parsed hybrid part: +1 day(s)
date: input timezone: +01:00 (set from system default)
date: warning: using midnight as starting time: 00:00:00
date: starting date/time: '(Y-M-D) 2038-01-19 00:00:00 TZ=+01:00'
date: warning: when adding relative days, it is recommended to specify 12:00pm
date: error: adding relative date resulted in an invalid date: '(Y-M-D) 2038-01-20 00:00:00 TZ=+01:00'
date: invalid date '20380119 + 1 days'

date -d "20380120" --debug

date: parsed number part: today/this/now
date: input timezone: +01:00 (set from system default)
date: warning: using midnight as starting time: 00:00:00
date: error: invalid date/time value:
date:     user provided time: '(Y-M-D) 2038-01-20 00:00:00 TZ=+01:00'
date:        normalized time: '(Y-M-D) 2038-01-20 00:00:00 TZ=+01:00'
date: 
date:      possible reasons:
date:        numeric values overflow;
date:        missing timezone
date: invalid date '20380120'

dateGNUにこの日付を計算させる方法はありますか?
(LINUX 32ビットシステムの場合)

  Operating System: Debian GNU/Linux buster/sid
            Kernel: Linux 4.12.0-2-686-pae
      Architecture: x86

ベストアンサー1

32ビットLinuxでGNUに固執する場合は、date2038年以降の日付を処理する簡単な方法はありません。管理者はcoreutilsこれがcoreutilsバグだとは思わないだから、そこから修正を期待しないでください。修正は以下で提供する必要があります。Cライブラリそしてカーネル。進行中の作業を試みるには、次のものが必要です。

そしてかなりの量の技術と忍耐。

32ビットLinux環境で2038年を処理する計画の詳細については、以下を参照してください。貯水温網そしてDebConf 17の2038 BoFレポート(後続のコメントとLWNから)。2019年1月LWN記事カーネルに実装される変更について説明します。

おすすめ記事