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 기사커널에서 구현되는 변경 사항을 설명합니다.

관련 정보