2010-04-15 2 views
1

IMAP 사서함을 처리 중이며 mxDateTime 패키지를 사용하여 날짜를 구문 분석하는 데 문제가 있습니다. 2009 년 거의 동일한 날짜가 잘 작동하는지ARPA 형식 (전자 메일 날짜)으로 1904 날짜를 구문 분석 할 수 없습니다.

>>> import mx.DateTime 
>>> import mx.DateTime.ARPA 
>>> mx.DateTime.ARPA.ParseDateTimeUTC("Fri, 1 Jan 1904 00:43:25 -0400").gmtoffset() 
Traceback (most recent call last): 
    File "<interactive input>", line 1, in <module> 
Error: cannot convert value to a time value 
>>> mx.DateTime.ARPA.ParseDateTimeUTC("Thu, 1 Jan 2009 00:43:25 -0400").gmtoffset() 
<mx.DateTime.DateTimeDelta object for '-08:00:00.00' at 1497b60> 
>>> 

참고 : 같은 특히, 초기 날짜에서 "1904년 1월 1일 (금) 0시 43분 25초 -0400"문제를 일으키는 것입니다. mxDateTime 자체에서 날짜 제한에 대한 설명을 찾을 수 없습니다. 왜 이런 생각일까요?

들으,

라몬

+0

'mx .__ version__'을 (를) 게시하십시오. 버전 3.1.2를 사용하여 오류를 재현 할 수 없습니다. – unutbu

+0

mx .__ version__은 3.1.2이고 Windows는 – Ramon

+2

입니다. 1904 년에 전자 메일을 보낸 사람은 누구입니까? – kwatford

답변

2

IT는 mxDateTime 객체는 the Unix Epoch 후 가을 날짜 시간을 처리 할 수 ​​있습니까?

+0

대뇌 피질의 지금; 이 패키지의 주장 된 기능 중 하나는이 기능을 처리한다는 것입니다. http://www.egenix.com/products/python/mxBase/mxDateTime/mxDateTime.pdf의 문서 소개에서 : "유닉스 시대 이전의 날짜 처리 (1.1.1970) 외에도 유닉스 이외의 날짜에도 올바르게 작동합니다 제한 시간 (현재 유닉스시간 값은 일반적으로 32 비트 정수를 사용하여 인코딩되며 2038 년에는 한계에 도달 함) 따라서 2000 년과 2038 년은 안전합니다. " – Ramon

+2

글쎄, 결코 상처를 입히지 마라. 1970 년과 1969 년에 날짜를 지어 보자. – Amber

+0

그 모습 : >>> mx.DateTime.ARPA.ParseDateTimeUTC ("Thu, 1970 년 1 월 1 일 00시 43 분 25 초 -0400") .gmtoffset() 08 : 00 : 00.00 'at 1497b60> >>> mx.DateTime.ARPA.ParseDateTimeUTC ("Wed, 1969 년 1 월 1 일 00:43:25 -0400"). gmtoffset() 트레이스 백 (최근 호출 마지막) : 파일 "", 라인 1, 오류 : 값을 시간 값 – Ramon

0

eGenix 사람들의 도움을 받아 알아 냈습니다. Epoch 문제이지만 수동으로 시간대 오프셋을 추출한 다음 명시 적으로 다시 적용하여 해결할 수 있습니다.

>>> s = "Wed, 1 Jan 1969 00:43:25 -0400" 
>>> delta = ParseDateTime(s) - ParseDateTimeUTC(s) 
Traceback (most recent call last): 
File "<interactive input>", line 1, in <module> 
NameError: name 'ParseDateTime' is not defined 
>>> delta = mx.DateTime.ARPA.ParseDateTime(s) - mx.DateTime.ARPA.ParseDateTimeUTC(s) 
>>> mx.DateTime.ARPA.str(mx.DateTime.ARPA.ParseDateTime(s), delta) 
'Wed, 01 Jan 1969 00:43:25 -0400' 
>>> 

감사합니다.

관련 문제