시스템에 날짜 (GNU coreutils) 7.1이 설치되어 있습니다.
14-Dec-1901 이전의 날짜를 확인하려고하면 “잘못된 날짜”오류가 발생합니다. 예를 들어
$ 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 일 이후의 날짜와 비슷한 오류가 발생합니다.
답변
좋은 질문.
문서 가 허용되어야 말한다.
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 날짜가 32 비트 시간 값을 사용하는 것 같습니다.
64 비트 시스템을 사용하거나 다른 도구 (예 : Perl의 DateTime 또는 Python의 datetime) 를 사용하여이를 어떻게 해결할 수 있는지 잘 모르겠습니다 .
일부 배경 :
유닉스 시간은 정수 값을 사용하여 1970 년 1 월 1 일부터 초 수를 계산합니다. 시스템이 32 비트 정수를 사용하는 경우 포워드는 2.1 억 초 (최대 2038-01-19 03:14:02 UTC) 및 21 억 초 (1901-12-13 20:45:52까지) 만 계산할 수 있습니다. UTC).
자세한 정보 :
답변
시스템 (또는 적어도 해당 날짜 버전 )에서 32 비트 내부 시간 값을 사용 중일 수 있습니다.
유닉스 시대 (제로 타임 값)는 1970-01-01 00:00:00 UTC입니다. 이 시작점은 부호있는 32 비트 시간 값의 범위를 벗어나 1901-12-13 00:00 EST입니다.
1901-12-14 00:00:00 EST는 -2147454000
1901-12-13 15:45:52 EST는 -2147483648 (일명 INT_MIN
C에서는 최소 32 비트 부호있는 정수)
1901-12-13 00:00 : 00 EST는 -2147540400입니다.
1901-12-13 15:45:52 EST를 사용해보십시오. 작동해야하지만 1 초 일찍 1901-12-13 00:00과 같은 방식으로 실패합니다.