2009-07-03 3 views
5

나는 ut8 타임 스탬프를 IS8601 형식으로 가지고 있으며 유닉스 시간으로 변환하려하고있다. 이것은 내 콘솔 세션입니다.Unix 시간으로 변환 할 때 시간대 (UTC)를 지정하는 방법은 무엇입니까? (파이썬)

In [9]: mydate 
Out[9]: '2009-07-17T01:21:00.000Z' 
In [10]: parseddate = iso8601.parse_date(mydate) 

In [14]: ti = time.mktime(parseddate.timetuple()) 

In [25]: datetime.datetime.utcfromtimestamp(ti) 
Out[25]: datetime.datetime(2009, 7, 17, 7, 21) 
In [26]: datetime.datetime.fromtimestamp(ti) 
Out[26]: datetime.datetime(2009, 7, 17, 2, 21) 

In [27]: ti 
Out[27]: 1247815260.0 
In [28]: parseddate 
Out[28]: datetime.datetime(2009, 7, 17, 1, 21, tzinfo=<iso8601.iso8601.Utc object at 0x01D74C70>) 

알다시피 정확한 시간을 되돌릴 수 없습니다. 내가 fromtimestamp()를 사용하면 시간이 1만큼 앞당겨지며 utcfromtimestamp()를 사용하면 6 시간이 앞당겨집니다.

어떤 조언이 필요합니까?

감사합니다.

답변

13

당신은 datetime.utctimetuple()와 UTC의 struct_time을 만든 다음 calendar.timegm()와 유닉스 타임 스탬프이 변환 : utctimetuple()이 정규화 때문에

calendar.timegm(parseddate.utctimetuple()) 

이것은 또한, 오프셋 일광 절약 시간을 처리합니다.

+0

'timegm()'를 반환 정수. 그것은 두 번째 부분을 무시합니다. – jfs

0

나는 단지 추측하고 있지만 시간대 때문에 한 시간 차이가있을 수는 없지만 일광 절약 시간 켜짐/꺼짐으로 인해 발생할 수 있습니다.

0
naive_utc_dt = parseddate.replace(tzinfo=None) 
timestamp = (naive_utc_dt - datetime(1970, 1, 1)).total_seconds() 
# -> 1247793660.0 

자세한 내용은 another answer to similar question을 참조하십시오.

그리고 다시 : 초

utc_dt = datetime.utcfromtimestamp(timestamp) 
# -> datetime.datetime(2009, 7, 17, 1, 21) 
0
import time 
import datetime 
import calendar 

def date_time_to_utc_epoch(dt_utc):   #convert from utc date time object (yyyy-mm-dd hh:mm:ss) to UTC epoch 
    frmt="%Y-%m-%d %H:%M:%S" 
    dtst=dt_utc.strftime(frmt)    #convert datetime object to string 
    time_struct = time.strptime(dtst, frmt) #convert time (yyyy-mm-dd hh:mm:ss) to time tuple 
    epoch_utc=calendar.timegm(time_struct) #convert time to to epoch 
    return epoch_utc 

#----test function -------- 
now_datetime_utc = int(date_time_to_utc_epoch(datetime.datetime.utcnow())) 
now_time_utc = int(time.time()) 

print (now_datetime_utc) 
print (now_time_utc) 

if now_datetime_utc == now_time_utc : 
    print ("Passed") 
else : 
    print("Failed") 
관련 문제