मैं डेटाइम टाइम ऑब्जेक्ट से पाइट्ज़ टाइमज़ोन कैसे निकाल सकता हूं?


121

क्या पाइत्ज़ डेटाइम ऑब्जेक्ट से टाइमज़ोन निकालने का एक सरल तरीका है? इस उदाहरण से
पुनर्निर्माण करना जैसे :dtdt_tz

>>> 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>)

जवाबों:


208

किसी टाइमटाइम ऑब्जेक्ट से टाइमज़ोन (tzinfo) निकालने के लिए:

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

यदि आप तीर की तरह एक पुस्तकालय का उपयोग कर रहे हैं , तो आप टाइमज़ोन को केवल एक तीर ऑब्जेक्ट को डेटाइम ऑब्जेक्ट में परिवर्तित करके निकाल सकते हैं, फिर ऊपर उदाहरण के रूप में एक ही काम कर रहे हैं।

# <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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.