내 시스템에 날짜(GNU coreutils) 7.1이 설치되어 있습니다.
1901년 12월 14일 이전 날짜를 확인하려고 하면 "잘못된 날짜" 오류가 발생합니다. 예를 들어,
$ date -d 1901-12-13
date: invalid date `1901-12-13'
$ date -d 1901-12-14
Sat Dec 14 00:00:00 EST 1901
date
유틸리티가 1901년 이전 연도를 유효한 것으로 처리하도록 하려면 어떻게 해야 합니까 ?
2038년 1월 19일 이후 날짜에 대해 비슷한 오류가 발생합니다.
답변1
좋은 질문.
이것문서허용되어야 한다고 하더군요.
info date 'Date input formats' 'Calendar date items'
숫자 월의 경우 ISO 8601 형식 "YEAR-MONTH-DAY"가 허용됩니다. 여기서 YEAR는 양수입니다.
숫자가 10보다 작으면 앞에 0이 있어야 합니다.
YEAR가 68 이하이면 2000을 추가하고, YEAR가 100보다 작으면 1900을 추가합니다.
32비트 시스템을 사용하고 계십니까?
2038-01-20 이후 날짜에도 오류가 발생합니까?
date -d '2038-01-20'
그렇다면 GNU Date가 32비트 시간 값을 사용하는 것 같습니다.
예를 들어 64비트 시스템을 사용하거나 다른 도구를 사용하는 것 외에는 이 문제를 해결하는 방법을 잘 모르겠습니다.날짜 시간펄에서 또는날짜 시간파이썬에서.
일부 배경:
Unix 시간은 정수 값을 사용하여 1970년 1월 1일 이후의 초 수를 계산합니다. 시스템이 32비트 정수를 사용하는 경우 앞으로 21억초(2038-01-19 03:14:02 UTC 기준)와 뒤로 21억초(1901-12-13 20:45:52로 돌아가기)만 계산할 수 있습니다. )UTC).
자세한 내용은 다음을 방문하십시오.
답변2
귀하의 시스템(또는 최소한 이 버전의날짜)은 32비트 내부 시간 값을 사용할 수 있습니다.
Unix 시대(시간 값 0)는 1970-01-01 00:00:00 UTC입니다. 이 시작점은 1901-12-13 00:00 EST를 부호 있는 32비트 시간 값 범위 밖에 둡니다.
1901-12-14 00:00:00 EST는 -2147454000
1901-12-13 15:45:52 EST는 -2147483648(C 언어라고도 함 INT_MIN
, 최소 32비트 부호 있는 정수)
1901-12-13 00:00 : 00 미국 동부 시간은 -2147540400입니다.
1901-12-13 15:45:52 EST를 시도해 볼 수 있습니다. 작동해야 하지만 1901-12-13 00:00처럼 1초 일찍 실패할 수도 있습니다.