2012-06-20 2 views
4

줄루 또는 UTC 시간에 ISO 8601 형식의 문자열을 읽는 프로세스가 있습니다. 예를 들어, 유닉스 타임 스탬프에서 numpy.datetime64 객체를 만들고 타임 존을 UTC로 어떻게 설정합니까?

2012-06-20T21:15:00Z 
2012-06-20T21:16:00Z 
2012-06-20T21:17:00Z 
2012-06-20T21:18:00Z 

나는 시간대 인식 파이썬 날짜 개체에 문자열을 변환하고 유닉스 타임 스탬프로 변환하여 정수로 바이너리 형식으로 저장합니다. 나는 다시 다른 프로세스에 이러한 타임 스탬프를 읽을 때 예를 들어,
dt_str = '2012-06-20T21:15:00Z' 
ts = int(mktime(datetime.strptime(dt_str, '%Y-%m-%dT%H:%M:%SZ').timetuple())) 
# ts = 1340241300 

나는 타임 스탬프에서 직접 numpy.datetime64 개체를 인스턴스화하고 싶습니다. 문제는 datetime64가 시간대를 현지 시간대로 설정한다는 것입니다.

np_dt = np.datetime64(ts,'s') 
# np_dt = numpy.datetime64('2012-06-20T21:15:00-0400') 

내가 UTC 시간이되도록 내 타임 스탬프에서 읽을 수있는 방법을 알고있는 사람이 있습니까? np_dt가 numpy.datetime64 ('2012-06-20T21 : 15 : 00-0000')이면 같을 것이라고 생각합니다. the documentation 유일한 방법으로 판단

안부

답변

1

dateutil 모듈을 사용할 수 있습니다. 첫째, 저장 한 타임 스탬프 정수에서 날짜 객체 생성 :

>>> ts = 1340241300 
>>> import datetime 
>>> from dateutil import tz 
>>> dt = datetime.datetime.fromtimestamp(ts).replace(tzinfo=tz.tzutc()) 
>>> dt 
datetime.datetime(2012, 6, 20, 21, 15, tzinfo=tzutc()) 

을 다음 로컬 시간대로 변환되는, 그것은 NumPy와에 전달 (나는에 -4 오전) :

>>> import numpy as np 
>>> np.datetime64(dt.isoformat()) 
numpy.datetime64('2012-06-20T17:15:00-0400') 
+0

그래서 UTC를 로컬 시간대로 변환하여 numpy가 로컬 시간대를 부착 할 때 정확한 시간을 반영하도록합니다. 일광 절약 전환으로 얼마나 잘 작동하는지 궁금합니다. –

+0

예, 정확하게. 상관없이 현지 시간대로 작동해야합니다. – jterrace

+0

답장을 보내 주셔서 감사합니다. 타임 스탬프를 문자열로 남기는 것이 나을 것 같습니다. datetime64에 대한 더 많은 독서를해야 할 것입니다.하지만 이상적으로는 항상 UTC 시간으로 작업하고 싶습니다. –

0

직접적 시간대를 지정하는 문자열을 만드는 것입니다 할 수 있습니다. 따라서 먼저 datetime.datetime 객체를 만들고 'Z' 문자열을 추가 한 다음 numpy.datetime64을 생성해야합니다.

+0

감사에 대한 답장. 나는 타임 스탬프를 정수로 저장하는 것으로부터 무엇을 얻는지를 결정해야 할 것이다. 문자열을 다시 'Z'에 추가하고 datetime64 객체를 인스턴스화하는 데 비용을 들여야한다. –

4

코드의 시간대 설정은 어떻게됩니까?

import os, time 
os.environ['TZ'] = 'GMT' 
time.tzset() 
# then your code 
np_dt = np.datetime64(ts,'s') 
+0

이 모양은 numpy> = 1.7.0이 필요합니다. datetime64의 창조는 1.6.2 (초)을 지정 있도록 표시되지 않습니다. 수입 pkg_resources pkg_resources.get_distribution ('NumPy와')를 버전 '1.6.2' np.datetime64 (1338624706, 'S') TypeError : 함수가 최대 1 인수 (주어진 2) –

+0

코드가 잘못되었습니다. utc와 gmt가 같은가요? (하루 광 절약에 대해서는, 일광 절약을 따르지 않습니다 : http : //stackoverflow.com/questions/5495803/does-utc-observe-daylight-saving-time ....) – ntg

+0

UTC가 더 최근입니다. 그리니치 표준시보다 정확하다. UTC를 사용하는 것이 좋습니다. 둘 다 일광 절약제를 따르지 않습니다. http://geography.about.com/od/timeandtimezones/a/gmtutc.htm – karlcow

관련 문제