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


11

시스템에 날짜 (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 일 이후의 날짜와 비슷한 오류가 발생합니다.


오류가 없습니다. coreutils 8.10을 사용하고 있습니다. 오래된 버그입니까?
xenoterracide

@xenoterracide 당신은 64 비트 시스템입니까?
Mikel

예 @Mikel, 나는
xenoterracide

답변:


15

좋은 질문.

문서 가 허용되어야 말한다.

 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).

자세한 정보 :


고마워 Mikel, 나는 32 비트 머신에 있다고 생각합니다. 실제로, 나는 원격 서버를 사용하고 있으며 서버 uname는 i686 시스템이라고 말하고 32 비트 시스템이라고 가정한다는 사실을 제외하고는 명령으로 도 많은 정보를 공개하지 않습니다 . 2038 문제는 원격 서버에 실제로 문제가 있습니다. 입력 해 주셔서 다시 한 번 감사드립니다! 매우 감사!!
Jasdeep Singh

예, i686은 32 비트입니다. 기쁘다. 그보다 오래된 날짜를 다루는 데 도움이 필요하면 내가 제안한 Python 및 Perl 모듈을 시도하고 작동하지 않으면 다른 질문을 게시하십시오.
Mikel

7

시스템 (또는 적어도 해당 날짜 버전 )에서 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과 같은 방식으로 실패합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.