나는 "2038 년 버그"를 우연히 발견하게하는 작은 bash 스크립트를 작성했다 . 나는 전에이 문제에 대해 몰랐고 스크립트 가이 마술 날짜 (2038 년 1 월 19 일 UTC : 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'
date
이 날짜에 GNU를 계산할 수있는 방법 이 있습니까?
(LINUX 32 비트 시스템에서)
Operating System: Debian GNU/Linux buster/sid
Kernel: Linux 4.12.0-2-686-pae
Architecture: x86
3
32 비트 시스템에서이를 해결하는 한 가지 방법은 * BSD OS를 사용하는 것입니다.
—
Rui F Ribeiro
@Kusalananda 불분명해서 죄송합니다. 예, GNU를위한 방법을 요구하고
—
nath
date
있습니다. 질문을 편집하겠습니다 ...
FWIW에서 OpenBSD 는 2014 년에이를 수정했습니다 . 많은 작업 이었지만 어쨌든 그들은 모든 관련 비트를 패치했습니다.
—
사토 카츠라
@RuiFRibeiro 정확히 사실이 아님 : time_t는 i386을 제외한 모든 지원되는 아키텍처에서 8 바이트입니다 .
—
Isaac