2014-12-09 3 views
1

날짜를 유닉스 타임 스탬프로 변환하고 포맷 할 때, 한 시간 추가됩니다. 내가 뭘 잘못하고 있니?날짜를 유닉스 타임 스탬프로 변환 할 때 1 시간 추가

>>> import dateutil.parser 
>>> import datetime 

>>> date_str = "2014-12-09T19:00:00+1100" 
>>> date = dateutil.parser.parse(date_str) 
>>> unix = int(date.strftime('%s')) 

>>> date_str 
'2014-12-09T19:00:00+1100' 

>>> date 
2014-12-09 19:00:00+11:00 

>>> print(unix) 
1418115600 

>>> datetime.datetime.fromtimestamp(unix).strftime('%Y-%m-%d %H:%M:%S') 
2014-12-09 20:00:00 

시간이 19:00에서 20:00으로 변경되었습니다. 나는 이것이 시간대와 관련이 있다고 의심하고 있습니다. 그러나 나는 정확히 무엇이 잘못 될지 전혀 모른다.

유닉스 타임 스탬프를 확인하기 위해 Epoch calculator을 사용했습니다. 그것은 하나의 시간은 날짜 유닉스 타임 스탬프로 변환하는 과정에서 추가되고있는 것 같습니다. (date = dateutil.parser.parse (date_str))

도움을 주시면 감사하겠습니다.

+0

'datetime.datetime.fromtimestamp (유닉스) .strftime ('% Y- % m- % d % H : % M : % S % Z')'? – hobbs

+0

나는 '2014-12-09 20:00:00'이된다. 시간대 오프셋이 누락 된 것 같습니다. @hobbs – bman

답변

1

당신은 수행하여 날짜 개체에서 유닉스 타임 스탬프를 얻을 수 있습니다

import pytz 

timestamp = int((datetime_obj - datetime.datetime(1970, 1, 1, tzinfo=pytz.utc)).total_seconds()) 

이것은 pytz 라이브러리가 필요합니다. 이 솔루션은 Python 2.7+이므로 total_seconds()을 사용하고 있습니다.

귀하의 경우, 원래 날짜 시간과 일치하는 시간 소인 1418112000을 제공합니다.

+0

이것은 실제로 작동합니다. 하지만 date.strftime ('% s')이 유닉스 시대에서 초를 주는지 궁금합니다. 계산과 함께 얻는 값과 정확하게 똑같은 값을 주어야합니다. 왜 1 시간 달라? @Simeon Visser – bman

+0

@Dane : 잘 모르겠다. 문서화 된'% s '이 보이지 않아서 그것이 제대로 작동 하는지를 알 수 없다. 나는 당신이'% s'을 사용해야한다고 생각하지 않습니다. –

+0

문서보기; 시간대를 인수로 지정하지 않으면 컴퓨터의 로컬 날짜와 시간으로 변환됩니다. –

관련 문제