날짜 - 1901년 이전 연도는 유효하지 않은 것으로 간주됩니다.

날짜 - 1901년 이전 연도는 유효하지 않은 것으로 간주됩니다.

내 시스템에 날짜(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초 일찍 실패할 수도 있습니다.

관련 정보