पाइथन में टाइमज़ोन जागरूक डेटाटाइम ऑब्जेक्ट कैसे बनाएं?

| | | | | | | | | | | | | | | | | | |

मुझे क्या करने की आवश्यकता है

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

मैंने क्या प्रयास किया

सबसे पहले, समस्या को प्रदर्शित करने के लिए :

पायथन 2.6.1 (r261:67515, जून 24 2010, 21:47:49) [जीसीसी 4.2.1 (ऐप्पल इंक. बिल्ड 5646)] डार्विन प्रकार पर "सहायता" , "कॉपीराइट", "क्रेडिट" या "लाइसेंस" अधिक जानकारी के लिए। >>> आयात डेटाटाइम >>> आयात pytz >>> अनजान = datetime.datetime(2011,8 ,15,8,15,12,0) >>> अनजान datetime.datetime(2011, 8, 15, 8, 15, 12) >>> जागरूक = datetime.datetime(2011,8, 15,8,15,12,0,pytz.UTC) >>> जागरूक datetime.datetime(2011, 8, 15, 8, 15, 12, tzinfo=<UTC>) >>> जागरूक == अनजान ट्रेसबैक (सबसे हालिया कॉल अंतिम): फ़ाइल "<stdin>", पंक्ति 1, <मॉड्यूल> में लेखन त्रुटि: ऑफसेट-बेवकूफ और ऑफसेट-जागरूक डेटाटाइम्स की तुलना नहीं कर सकता 

सबसे पहले, मैंने astimezone की कोशिश की:

>>> Unknown.astimezone(pytz.UTC) ट्रेसबैक (सबसे हालिया कॉल लास्ट): फाइल "<stdin>", लाइन 1, <मॉड्यूल> ValueError: astimezone () एक भोले डेटाटाइम पर लागू नहीं किया जा सकता >>> 

यह बहुत आश्चर्यजनक नहीं है कि यह विफल हो गया, क्योंकि यह वास्तव में एक रूपांतरण करने की कोशिश कर रहा है। बदलें एक बेहतर विकल्प की तरह लग रहा था (के अनुसार मैं पायथन में datetime.today() का मान कैसे प्राप्त करूं जो "समयक्षेत्र जागरूक"? है:

>>> Unknown.replace(tzinfo=pytz.UTC) datetime.datetime(2011, 8, 15, 8, 15, 12, tzinfo=<UTC>) >>> अनजान == जागरूक ट्रेसबैक (सबसे हालिया कॉल अंतिम): फ़ाइल "<stdin>", पंक्ति 1, <मॉड्यूल> लेखन त्रुटि: ऑफसेट-बेवकूफ और ऑफसेट-जागरूक डेटाटाइम्स की तुलना नहीं कर सकता >>> 

लेकिन जैसा कि आप देख सकते हैं, tzinfo सेट करने के लिए प्रतिस्थापित लगता है, लेकिन वस्तु को जागरूक नहीं करता है . मैं इसे पार्स करने से पहले एक टाइमज़ोन रखने के लिए इनपुट स्ट्रिंग को डॉक्टरेट करने के लिए तैयार हो रहा हूं (मैं पार्सिंग के लिए dateutil का उपयोग कर रहा हूं, अगर यह मायने रखता है), लेकिन यह अविश्वसनीय रूप से कठिन लगता है।

इसके अलावा, मैंने इसे समान परिणामों के साथ Python 2.6 और Python 2.7 दोनों में आजमाया है।

संदर्भ

मैं कुछ डेटा फ़ाइलों के लिए एक पार्सर लिख रहा हूं। एक पुराना प्रारूप है जिसका मुझे समर्थन करने की आवश्यकता है जहां दिनांक स्ट्रिंग में टाइमज़ोन संकेतक नहीं है। मैंने पहले से ही डेटा स्रोत को ठीक कर लिया है, लेकिन मुझे अभी भी लीगेसी डेटा प्रारूप का समर्थन करने की आवश्यकता है। विरासत डेटा का एक बार रूपांतरण विभिन्न व्यावसायिक बीएस कारणों के लिए एक विकल्प नहीं है। सामान्य तौर पर, मुझे हार्ड का विचार पसंद नहीं है - एक डिफ़ॉल्ट समय क्षेत्र को कोड करना, इस मामले में यह सबसे अच्छा विकल्प लगता है। मुझे उचित विश्वास के साथ पता है कि विचाराधीन सभी विरासत डेटा यूटीसी में है, इसलिए मैं इस मामले में डिफ़ॉल्ट के जोखिम को स्वीकार करने के लिए तैयार हूं।< /पी>