날짜-1901 이전의 연도는 유효하지 않은 것으로 간주됩니다. 발생합니다. 예를 들어 $ date

시스템에 날짜 (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_MINC에서는 최소 32 비트 부호있는 정수)
1901-12-13 00:00 : 00 EST는 -2147540400입니다.

1901-12-13 15:45:52 EST를 사용해보십시오. 작동해야하지만 1 초 일찍 1901-12-13 00:00과 같은 방식으로 실패합니다.


답변