मुझे लगता है कि आप कुछ विधि बंद दाढ़ी कर सकते हैं कॉल करता है, तो आप इसे इस प्रकार कार्य करें:
>>> from datetime import datetime
>>> datetime.now(pytz.timezone("Australia/Melbourne")) \
.replace(hour=0, minute=0, second=0, microsecond=0) \
.astimezone(pytz.utc)
लेकिन ... आपकी कोड में सौंदर्यशास्त्र से बड़ी समस्या है: यह दिन पर गलत परिणाम दे देंगे डेलाइट सेविंग टाइम पर या स्विच से स्विच का।
इस का कारण यह है कि न तो datetime कंस्ट्रक्टर्स और न ही replace()
डीएसटी खाते में बदल जाता है ले रहा है।
उदाहरण के लिए:
>>> now = datetime(2012, 4, 1, 5, 0, 0, 0, tzinfo=pytz.timezone("Australia/Melbourne"))
>>> print now
2012-04-01 05:00:00+10:00
>>> print now.replace(hour=0)
2012-04-01 00:00:00+10:00 # wrong! midnight was at 2012-04-01 00:00:00+11:00
>>> print datetime(2012, 3, 1, 0, 0, 0, 0, tzinfo=tz)
2012-03-01 00:00:00+10:00 # wrong again!
हालांकि, tz.localize()
राज्यों के लिए प्रलेखन:
यह विधि एक datetime निर्माता के लिए एक tzinfo तर्क गुजर से localtimes, बल्कि निर्माण करने के लिए इस्तेमाल किया जाना चाहिए।1582 से पहले, हालांकि
>>> import pytz
>>> from datetime import datetime, date, time
>>> tz = pytz.timezone("Australia/Melbourne")
>>> the_date = date(2012, 4, 1) # use date.today() here
>>> midnight_without_tzinfo = datetime.combine(the_date, time())
>>> print midnight_without_tzinfo
2012-04-01 00:00:00
>>> midnight_with_tzinfo = tz.localize(midnight_without_tzinfo)
>>> print midnight_with_tzinfo
2012-04-01 00:00:00+11:00
>>> print midnight_with_tzinfo.astimezone(pytz.utc)
2012-03-31 13:00:00+00:00
दिनांकों कोई गारंटी:
इस प्रकार, आपकी समस्या इतनी तरह हल किया जाता है।
मिलीसेकंड – joeforker
को न भूलें डीएसटी को नजरअंदाज करता है। कहीं '। Localize()/सामान्यीकृत() 'आवश्यक हो सकता है। – jfs
@ जेएफ। सेबेस्टियन: दिलचस्प! क्या आपको यकीन है? आपके पास कोई उदाहरण है? यह पूरी तरह से संभव है। – hop