2010-03-25 15 views
15

나는 모든 인터넷을 통해 검색되었습니다이 문제파이썬 | mktime은 오버플로 오류

OverflowError: mktime argument out of range 

내가 알고 싶은

t = (1956, 3, 2, 0, 0, 0, 0, 0, 0) 
ser = time.mktime(t) 

이 예외를 일으키는 코드에 대한 적절한 해결책을 찾을 수 없습니다 이 예외에 대한 실제 이유는 날짜가 유효한 범위에 있지 않지만 나에게 의미가 없으며 범위가 무엇인지에 대해 설명합니다. 그것은 우리가 사용하고있는 시스템에 달려 있습니까? 또한이 문제에 대한 좋은 해결책을 알고 싶습니다.

감사합니다.

답변

19

time.mktime은 플랫폼의 C 라이브러리에서 기본 mktime 함수를 호출합니다. 예를 들어 위의 코드는 Mac OS X에서 나와 완벽하게 잘 작동하지만, Unix 시대 이전의 날짜는 음수입니다. 그 이유는 플랫폼의 mktime 구현이 유닉스 시대 이전의 날짜를 지원하지 않기 때문입니다. 당신은 위의 날짜에 해당하는 datetime 객체를 생성하는 파이썬의 datetime 모듈을 사용하는 유닉스 시대를 대표하는 또 다른 datetime 대상에서 빼기와 시대 이후 (초)을 얻기 위해 계산 timedelta 객체를 사용할 수 있습니다

from datetime import datetime 
epoch = datetime(1970, 1, 1) 
t = datetime(1956, 3, 2) 
diff = t-epoch 
print diff.days * 24 * 3600 + diff.seconds 

업데이트 : 파이썬 2.7 이상을 사용하는 경우 Chad Miller의 코멘트에서 아래에 설명 된대로 print diff.total_seconds()을 간단하게 사용할 수 있습니다.

+1

인쇄 diff.total_seconds() –

+0

감사합니다. 답변을 업데이트했습니다. Python 2.5와 2.6은이 답변을 추가 할 때 2010 년에 훨씬 더 널리 퍼졌으며'total_seconds()'가 2.7 이후부터 사용 가능합니다. –