2009-07-03 14 views
5

मैं IS8601 प्रारूप में एक यूटीसी टाइमस्टैम्प है और यह यूनिक्स समय में बदलने के लिए कोशिश कर रहा हूँ। यह मेरा कंसोल सत्र है:यूनिक्स समय में कनवर्ट करते समय समय क्षेत्र (यूटीसी) निर्दिष्ट कैसे करें? (अजगर)

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() का उपयोग, और यह छह घंटे से आगे है अगर मैं)

किसी भी सलाह utcfromtimestamp का उपयोग (?

धन्यवाद!

उत्तर

13

आप datetime.utctimetuple() साथ यूटीसी में एक struct_time बना सकते हैं और उसके बाद calendar.timegm() के साथ एक यूनिक्स टाइमस्टैम्प में कनवर्ट कर:

calendar.timegm(parseddate.utctimetuple()) 

यह भी ध्यान किसी भी डेलाइट सेविंग टाइम ऑफसेट की, लेता है क्योंकि 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")