टाइमज़ोन के बीच स्विच करने के लिए टाइमडेल्टा का उपयोग करें। आप सभी की जरूरत timezones के बीच घंटे में ऑफसेट है। एक डेटाइम ऑब्जेक्ट के सभी 6 तत्वों के लिए सीमाओं के साथ बेला नहीं है। टाइमडेल्टा लीप इयर्स, लीप सेंचुरी आदि को भी बड़े आराम से हैंडल करता है। आपको पहले होना चाहिए
from datetime import datetime, timedelta
अगर offset
घंटों में टाइमजोन डेल्टा है तो :
timeout = timein + timedelta(hours = offset)
जहां टाइमलाइन और टाइमआउट डेटाइम ऑब्जेक्ट हैं। जैसे
timein + timedelta(hours = -8)
GMT से PST में परिवर्तित हो जाता है।
तो, कैसे निर्धारित करें offset
? यहाँ एक सरल कार्य है, बशर्ते कि आपके पास केवल समय-सीमा "जागरूक" का उपयोग किए बिना रूपांतरणों के लिए कुछ संभावनाएं हैं जो "जागरूक" हैं, जो कुछ अन्य उत्तर अच्छी तरह से करते हैं। थोड़ा मैनुअल, लेकिन कभी-कभी स्पष्टता सबसे अच्छा है।
def change_timezone(timein, timezone, timezone_out):
'''
changes timezone between predefined timezone offsets to GMT
timein - datetime object
timezone - 'PST', 'PDT', 'GMT' (can add more as needed)
timezone_out - 'PST', 'PDT', 'GMT' (can add more as needed)
'''
# simple table lookup
tz_offset = {'PST': {'GMT': 8, 'PDT': 1, 'PST': 0}, \
'GMT': {'PST': -8, 'PDT': -7, 'GMT': 0}, \
'PDT': {'GMT': 7, 'PST': -1, 'PDT': 0}}
try:
offset = tz_offset[timezone][timezone_out]
except:
msg = 'Input timezone=' + timezone + ' OR output time zone=' + \
timezone_out + ' not recognized'
raise DateTimeError(msg)
return timein + timedelta(hours = offset)
कई उत्तरों को देखने और सबसे कठिन कोड के साथ खेलने के बाद मैं (अब के लिए) सोच सकता हूं कि यह सबसे अच्छा लगता है कि सभी अनुप्रयोगों, जहां समय महत्वपूर्ण है और मिश्रित टाइमज़ोन के लिए जिम्मेदार होना चाहिए, सभी डेटाटाइम ऑब्जेक्ट बनाने के लिए एक वास्तविक प्रयास करना चाहिए "पता"। तब यह सबसे सरल उत्तर होगा:
timeout = timein.astimezone(pytz.timezone("GMT"))
उदाहरण के लिए GMT में बदलना। बेशक, किसी भी अन्य समय-क्षेत्र से, जिसे आप चाहते हैं, स्थानीय या अन्यथा में परिवर्तित करने के लिए, बस उपयुक्त टाइमज़ोन स्ट्रिंग का उपयोग करें जो पाइत्ज़ समझता है (pytz.all_timezones से)। डेलाइट बचत समय को भी ध्यान में रखा जाता है।