Saya menulis skrip bash kecil yang membuat saya menemukan "Tahun 2038 Bug" . Saya tidak tahu tentang masalah ini sebelumnya dan saya hanya berani memposting --debug
output yang saya dapatkan date
ketika skrip saya mencoba menghitung di tanggal ajaib ini (03:14:07 UTC pada 19 Januari 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'
Apakah ada cara untuk membuat GNU date
menghitung di tanggal ini?
(pada sistem LINUX 32 bit)
Operating System: Debian GNU/Linux buster/sid
Kernel: Linux 4.12.0-2-686-pae
Architecture: x86
date
. Aku akan mengedit pertanyaan saya ...Jawaban:
Jika Anda ingin tetap menggunakan GNU
date
di Linux 32-bit, tidak ada cara mudah untuk membuatnya bekerja dengan tanggal setelah 2038. Paracoreutils
pengelola tidak menganggap ini sebagaicoreutils
bug , jadi jangan berharap ada perbaikan di sana - perbaikannya akan memiliki datang dari perpustakaan C dan kernel. Jika Anda ingin bermain-main dengan pekerjaan yang sedang berjalan, Anda perlu:glibc
patch (berdasarkan desain diuraikan di sini ),dan keterampilan dan kesabaran yang layak.
Untuk lebih lanjut tentang cara 2038 direncanakan untuk ditangani di dunia Linux 32-bit, lihat LWN dan penulisan BoF 2038 di DebConf 17 (dengan komentar tindak lanjut di sana dan di LWN ). Artikel LWN Januari 2019 ini menjelaskan perubahan yang sedang dilaksanakan di kernel.
sumber