2012-07-30 8 views
5

저는 파이썬에서 iso8601 타임 스탬프를 나타내는 문자열로 처리해야합니다.python : 타임 스탬프 처리 방법 (ISO8601)

내 타임 스탬프 문자열은 다음 형식에 따라서 다음과 같습니다

timestamp = timestamp[:-6] 
timestamp = datetime.datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S") 

을하지만이 방법으로 나는 시간에 대한 모든 정보를 잃게 :

timestamp = "2011-08-18T10:29:47+03:00" 

현재 내가 사용 파이썬으로 변환하고있어 존. 나는 타임 스탬프와 파이썬, 불행하게도 아무도뿐만 아니라 시간대를 보존하지 않았다, 아니면 그냥 사용 시간대 지연 복구에 대한 때문에 여기에 많은 예제를 보았다 : 나는 또한 시도

delay = timestamp[-6:] 

:

timestamp = "2011-08-18T10:29:47+03:00" 
timestamp = datetime.datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S%z") 

은 그러나 당신이 몇 가지 통찰력을 줄 수

ValueError: 'z' is a bad directive in format '%Y-%m-%dT%H:%M:%S%z' 

을 반환?

+0

[인터넷 날짜/시간 형식은 rfc 3339 (iso 8601의 프로파일)에 설명되어 있습니다.] (http://tools.ietf.org/html/rfc3339#section-5.6) – jfs

+0

관련 내용 : [ISO to datetime 개체 : 'z는 나쁜 지시어]입니다 (http://stackoverflow.com/q/20194496/4279) – jfs

답변

2

python iso8601 모듈이 함께 내장되어 있습니다 시간대 정보를 처리 할 수있는 멋진 parse_date 방법 : 다른 시간대로 변환하려면

>>> import iso8601 
>>> iso8601.parse_date("2007-01-25T12:00:00Z") 
datetime.datetime(2007, 1, 25, 12, 0, tzinfo=<iso8601.iso8601.Utc ...>) 

>>> iso8601.parse_date("2011-08-18T10:29:47+03:00") 
datetime.datetime(2011, 8, 18, 10, 29, 47, tzinfo=<FixedOffset '+03:00'>) 

astimezone(tz) 방법을 사용

UTC datetime을 얻으려면 utctimetuple() 메서드를 사용할 수 있습니다.

+0

차가운. 결과를 UTC + 0으로 변환하는 방법을 알려주시겠습니까? – user601836

+1

@ user601836 : 얻은 날짜를 변환하는 2 가지 솔루션으로 답변을 업데이트했습니다. –

+0

해당 라이브러리 사용을 권장하지 않습니다. 마지막 업데이트는 2007 년이며 모든 유효한 형식을 허용하지 않습니다. – tback

1

시간대 지원을 제공하는 외부 모듈을 추가해야합니다. pytz module은 필요한 시간대 데이터베이스를 제공합니다.

당신은 당신을 위해 구문 분석을 할 수있는 pytz 시간대를 구성, 또는 zc.iso8601 또는 iso8601 같은 패키지를 사용하여 손으로 시간대를 분석해야합니다 중 하나

from zc.iso8601.parse import datetimetz 
datetimetz(timestamp)