2012-03-01 9 views
37

나는 다양한 형식에서 문자열로 날짜를 받아 (파이썬에서 개발) 시스템을 가지고 내가 가진 구문 분석에 them..Currently 날짜 문자열의 형식은 다음과 같습니다Python에서 datetime 구문 분석 ..?

이제
Fri Sep 25 18:09:49 -0500 2009 

2008-06-29T00:42:18.000Z 

2011-07-16T21:46:39Z 

1294989360 

나는 일반적인 원하는 적절한 datetime 객체에서 이러한 datetime 형식을 변환 할 수있는 파서 ...

그렇지 않으면 개별적으로 파싱해야합니다. 따라서 개별적으로 파싱하는 방법도 제공하십시오 (일반 파서가없는 경우). !!

답변

52

는 dateutil 패키지는 올바르게 자동으로 처음 3 형식을 처리, 길을 가야하는 것입니다 :

>>> from dateutil.parser import parse 
>>> parse("Fri Sep 25 18:09:49 -0500 2009") 
datetime.datetime(2009, 9, 25, 18, 9, 49, tzinfo=tzoffset(None, -18000)) 
>>> parse("2008-06-29T00:42:18.000Z") 
datetime.datetime(2008, 6, 29, 0, 42, 18, tzinfo=tzutc()) 
>>> parse("2011-07-16T21:46:39Z") 
datetime.datetime(2011, 7, 16, 21, 46, 39, tzinfo=tzutc()) 

이 위로 촌스러운듯한 unixtime 형식,하지만 다행히 표준 datetime.datetime

>>> from datetime import datetime 
>>> datetime.utcfromtimestamp(float("1294989360")) 
datetime.datetime(2011, 1, 14, 7, 16) 

4 형식을 처리하는이 밖으로 기능을 오히려 간단하다 :

from dateutil.parser import parse 
from datetime import datetime 

def parse_time(s): 
    try: 
     ret = parse(s) 
    except ValueError: 
     ret = datetime.utcfromtimestamp(s) 
    return ret 
01 작업을 위해입니다
+0

실제로 이것은 내가 한 일입니다. @TimPietzcker가 제안했을 때 ... .. 주석에서 볼 수 있습니다 .. !! ..하지만 멋진 답장 (및 코드 설명)에 대해 고맙습니다. !! –

+0

dateutil을 설치하려면 :'pip install python-dateutil'. 마치'pip'를 통해 설치하는 방법을 제공하지 않을 때 합법적 인 패키지가 아니라고 생각하기를 바랍니다. – ArtOfWarfare

14

dateutil 패키지를 조사해야합니다. @TimPietzcker 제안으로

+6

특히'dateutil.parser.parse()' – Kimvais

+0

고맙습니다. 대답 .. !!하지만 한가지 .. "dateutil.parser.parse"는 처음 3 개의 날짜 형식을 분석하고 있지만 구문 분석 할 수 없습니다. 마지막 날짜 형식 (긴 값)입니다. "범위를 벗어난 연도"예외를 표시하고 있습니다 ... 그러나 python inbuilt datetime 모듈은이 긴 값을 구문 분석 할 수 있습니다. 왜 그렇습니까? –

관련 문제