2012-10-22 8 views
9

मैं pytz का उपयोग कर रहा हूं। मैंने पूरे दस्तावेज पत्र के माध्यम से पढ़ा है, लेकिन यह नहीं देखा कि यह कैसे किया जा सकता है।pytz का उपयोग कर टाइमज़ोन के लिए देश कोड प्राप्त करें?

मेरे पास टाइमज़ोन है: अमेरिका/शिकागो। मैं चाहता हूं कि इस टाइमज़ोन के लिए संबंधित देश कोड प्राप्त करें: यूएस।

यह दर्शाता है कि मैं इस तरह के रूप में, विपरीत कर सकते हैं:

>>> country_timezones('ch') 
['Europe/Zurich'] 
>>> country_timezones('CH') 
['Europe/Zurich'] 

लेकिन मैं इसे दूसरी तरह के आसपास की ज़रूरत है।

क्या यह पायथन (या उस मामले के लिए किसी अन्य तरीके) का उपयोग करके पाइथन में किया जा सकता है?

उत्तर

9

आप pytz से country_timezones वस्तु का उपयोग करें और एक व्युत्क्रम मैपिंग कर सकते हैं:

अब बस जिसके परिणामस्वरूप शब्दकोश का उपयोग करें:

>>> timezone_country['Europe/Zurich'] 
u'CH' 
+0

यदि यह अलग-अलग देशों में समान टाइमज़ोन नाम का उपयोग किया जाता है तो यह टूट जाएगा। 'Country_timezones' में ऐसे कोई नाम नहीं हैं। लेकिन कुछ आम टाइमज़ोन इसमें नहीं हैं जैसे यूटीसी, यूएस/सेंट्रल, यूएस/पूर्वी, कनाडा/सेंट्रल, आदि – jfs

+0

@ जेएफ। सेबेस्टियन आपकी आखिरी वाक्य से आपका क्या मतलब था? उन टाइमज़ोन क्या नहीं हैं? – Snowman

+0

सभी समय क्षेत्र 'pytz' मानचित्र में बिल्कुल एक देश में परिभाषित किए गए हैं। इस प्रकार, यह तोड़ नहीं है। – jsalonen

2

यह आसान है। आपके पास dict प्रत्येक देश को टाइमज़ोन की सूची में मैपिंग कर रहा है। आप प्रत्येक list सदस्य को dict पर वापस मैप करना चाहते हैं।

केवल उत्तर देने के बजाय, देखते हैं कि इसे कैसे प्राप्त किया जाए।

पहला, अगर आप सिर्फ एक dict एक भी समय क्षेत्र के प्रत्येक देश मानचित्रण था, यह एक सरल रिवर्स मानचित्रण होगा:

timezone_countries = {timezone: country 
         for country, timezone in country_timezones.iteritems()} 

लेकिन यह काम नहीं करेगा; आपके पास टाइमज़ोन की सूची में मैपिंग है, और आप उस सूची में प्रत्येक टाइमज़ोन को देश में वापस मैप करना चाहते हैं। यही कारण है कि अंग्रेजी विवरण "कि सूची में प्रत्येक समय क्षेत्र" अजगर को तुच्छता से अनुवाद है:

timezone_countries = {timezone: country 
         for country, timezones in country_timezones.iteritems() 
         for timezone in timezones} 

यहाँ यह कार्रवाई में है:

>>> from pytz import country_timezones 
>>> timezone_countries = {timezone: country 
          for country, timezones in country_timezones.iteritems() 
          for timezone in timezones} 
>>> timezone_countries['Europe/Zurich'] 
u'CH' 

साइड नोट: आप अजगर 2 बनाम 3 का उल्लेख नहीं था, तो मैंने माना 2. यदि आप 3 पर हैं, तो iteritems से items बदलें, और आउटपुट के बजाय 'CH' होगा।

संबंधित मुद्दे