2012-06-08 14 views
65

क्या एक pytz डेटाटाइम ऑब्जेक्ट से टाइमज़ोन को निकालने का कोई आसान तरीका है?
उदा। इस उदाहरण में dt_tz से dt पुनर्निर्माण:हटाएं pytz timezone

# dt_tz is a datetime.datetime object 
dt = dt_tz.replace(tzinfo=None) 

आप arrow की तरह एक पुस्तकालय का उपयोग कर रहे हैं, तो आप बस द्वारा समय क्षेत्र निकाल सकते हैं:

>>> import datetime 
>>> import pytz 
>>> dt = datetime.datetime.now() 
>>> dt 
datetime.datetime(2012, 6, 8, 9, 27, 32, 601000) 
>>> dt_tz = pytz.utc.localize(dt) 
>>> dt_tz 
datetime.datetime(2012, 6, 8, 9, 27, 32, 601000, tzinfo=<UTC>) 

उत्तर

115

एक datetime वस्तु से एक समय क्षेत्र (tzinfo) निकालने के लिए एक तीर ऑब्जेक्ट को एक डेटाटाइम ऑब्जेक्ट में कनवर्ट करना, फिर उपर्युक्त उदाहरण के समान काम करना।

# <Arrow [2014-10-09T10:56:09.347444-07:00]> 
arrowObj = arrow.get('2014-10-09T10:56:09.347444-07:00') 

# datetime.datetime(2014, 10, 9, 10, 56, 9, 347444, tzinfo=tzoffset(None, -25200)) 
tmpDatetime = arrowObj.datetime 

# datetime.datetime(2014, 10, 9, 10, 56, 9, 347444) 
tmpDatetime = tmpDatetime.replace(tzinfo=None) 

आप ऐसा क्यों करेंगे? एक उदाहरण यह है कि MySQL अपने DATETIME प्रकार के साथ टाइमज़ोन का समर्थन नहीं करता है। तो ORM की तरह sqlalchemy का उपयोग करके आप टाइमज़ोन को हटा देंगे जब आप इसे datetime.datetime ऑब्जेक्ट डेटाबेस में डालने के लिए देते हैं। समाधान आपके datetime.datetime ऑब्जेक्ट को यूटीसी में परिवर्तित करना है (इसलिए आपके डेटाबेस में सबकुछ यूटीसी है क्योंकि यह टाइमज़ोन निर्दिष्ट नहीं कर सकता है) या तो इसे डेटाबेस में डालें (जहां टाइमज़ोन को हटा दिया जाता है) या इसे स्वयं हटा दें। यह भी ध्यान रखें कि datetime.datetime ऑब्जेक्ट्स की तुलना नहीं कर सकता है, जहां एक टाइमज़ोन जागरूक है और दूसरा टाइमज़ोन बेवकूफ है।

############################################################################## 
# MySQL example! where MySQL doesn't support timezones with its DATETIME type! 
############################################################################## 

arrowObj = arrow.get('2014-10-09T10:56:09.347444-07:00') 

arrowDt = arrowObj.to("utc").datetime 

# inserts datetime.datetime(2014, 10, 9, 17, 56, 9, 347444, tzinfo=tzutc()) 
insertIntoMysqlDatabase(arrowDt) 

# returns datetime.datetime(2014, 10, 9, 17, 56, 9, 347444) 
dbDatetimeNoTz = getFromMysqlDatabase() 

# cannot compare timzeone aware and timezone naive 
dbDatetimeNoTz == arrowDt # False, or TypeError on python versions before 3.3 

# compare datetimes that are both aware or both naive work however 
dbDatetimeNoTz == arrowDt.replace(tzinfo=None) # True 
संबंधित मुद्दे