"Year 2038 Bug" に遭遇した小さなbashスクリプトを書きました。私は以前この問題について知りませんでした。スクリプトがこの魔法の日付(1月19日の03:14:07 UTC)で計算しようとしたときに、date
から取得した--debug
出力を投稿することを敢えてしました。 2038)。
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'
この日付全体でGNU date
を計算する方法はありますか?
(LINUX 32ビットシステムの場合)
Operating System: Debian GNU/Linux buster/sid
Kernel: Linux 4.12.0-2-686-pae
Architecture: x86
32ビットLinuxでGNU date
に固執する場合、2038年以降の日付で動作させる簡単な方法はありません。 The coreutils
メンテナはこれをcoreutils
バグ とは見なさないので、そこでの修正を期待しないでください—修正は Cライブラリ とカーネルからのものでなければなりません。進行中の作業をいじるには、次のものが必要です。
glibc
パッチ ( ここで概説されている設計 に基づく)、そして、まともな量のスキルと忍耐力。
2038が32ビットLinuxの世界で処理されるように計画された方法の詳細については、 [〜#〜] lwn [〜#〜] および 2038の記述を参照) DebConf 17でのBoF (フォローアップコメントがあり、 LWN上 )。 この2019年1月のLWN記事 カーネルに実装されている変更について説明します。