2010-04-17 17 views
12

का उपयोग करते समय पाइथन डेटाटाइम डीएसटी समेत नहीं है यदि मैं यूटीसी डेटाटाइम को स्वीडिश प्रारूप में परिवर्तित करता हूं, तो ग्रीष्मकाल शामिल है (सीईएसटी)। हालांकि, टाइमज़ोन के रूप में स्वीडन के साथ डेटाटाइम बनाते समय, सीईएसटी के बजाय सीईटी मिलता है। ऐसा क्यों है?पायथन टाइमटाइम

>>> # Modified for readability 
>>> import pytz 
>>> import datetime 
>>> sweden = pytz.timezone('Europe/Stockholm') 
>>> 
>>> datetime.datetime(2010, 4, 20, 16, 20, tzinfo=pytz.utc).astimezone(sweden) 
datetime(2010, 4, 20, 18, 20, tzinfo=<... 'Europe/Stockholm' CEST+2:00:00 DST>) 
>>> 
>>> datetime.datetime(2010, 4, 20, 18, 20, tzinfo=sweden) 
datetime(2010, 4, 20, 18, 20, tzinfo=<... 'Europe/Stockholm' CET+1:00:00 STD>) 
>>> 

उत्तर

11

sweden वस्तु डिफ़ॉल्ट रूप से सीईटी समय क्षेत्र निर्दिष्ट करता है, लेकिन पता है जब CEST शुरू होता है और बंद करने के लिए पर्याप्त जानकारी है।

पहले उदाहरण में, आप datetime ऑब्जेक्ट बनाते हैं और इसे स्थानीय समय में परिवर्तित करते हैं। sweden ऑब्जेक्ट जानता है कि आपके द्वारा पारित यूटीसी समय डेलाइट बचत समय के दौरान होता है और इसे उचित रूप से परिवर्तित कर सकता है।

दूसरे उदाहरण में, datetime कन्स्ट्रक्टर हमेशा आपके इनपुट को नाइटलाइट-बचत-समय के रूप में व्याख्या करता है और उचित वस्तु देता है।

यदि datetime ने आपके इनपुट को वॉल-घड़ी के समय के रूप में माना और आपके लिए उचित डेलाइट-बचत सेटिंग चुना, तो साल के दौरान घड़ियों को वापस सेट किए जाने पर एक अस्पष्टता होगी। एक दीवार घड़ी पर एक ही घंटे दो बार होता है। इसलिए, datetime आपको यह निर्दिष्ट करने के लिए मजबूर करता है कि आप datetime ऑब्जेक्ट बनाते समय किस टाइमज़ोन का उपयोग कर रहे हैं।

+0

जानकारी के लिए धन्यवाद! साथ ही, pytz.timezone ऑब्जेक्ट का स्थानीयकरण फ़ंक्शन का उपयोग स्थानीय डेटाटाइम बनाने के लिए किया जा सकता है, डेटाटाइम (..., tzinfo = ) – Jesper

+4

@ जेस्पर: [pytz docs] (http://pytz.sf.net)) डीएसटी के साथ टाइमज़ोन के लिए tzinfo पैरामीटर के साथ डेटाटाइम कन्स्ट्रक्टर के बजाय .localize() का उपयोग करने के लिए स्पष्ट रूप से कहें। – jfs

0

टाइमज़ोन संक्षेप अद्वितीय नहीं हैं। उदाहरण के लिए "आईएसटी" "आयरिश मानक समय", "ईरानी मानक समय", "भारतीय मानक समय" या "इसाईली मानक समय" का उल्लेख कर सकता है। आपको उस पर पार्सिंग पर भरोसा नहीं करना चाहिए, और इसके बजाय ज़ोनिन्फो टाइमज़ोन का उपयोग करना चाहिए।