2012-10-22 11 views
9

pytz kullanıyorum. Tüm belge sayfasını okudum ama bunun nasıl yapılacağını görmedim.Zaman dilimi için ülke kodunu pytz'yi kullanarak al?

Saat dilimim var: America/Chicago. Tek istediğim bu saat dilimi için ilgili ülke kodunu almak: ABD.

Ben gibi, tersini yapabilir gösterir:

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

ama çevresinde başka bir yol yapmak gerekir.

Python'da pytz (veya bu konuyla ilgili başka bir yol) kullanılarak yapılabilir mi?

cevap

9

Sen pytz den country_timezones nesneyi kullanmak ve ters bir eşleme oluşturabilir:

Şimdi sadece çıkan sözlüğü kullanın:

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

. Country_timezones'de böyle bir isim yok. Ama bazı ortak zaman dilimleri, örneğin, UTC, ABD/Merkez, ABD/Doğu, Kanada/Merkez, vb değildir. – jfs

+0

@ J.F.Sebastian son cümlenin ne demek istediniz? Bu saat dilimleri neyin içinde değil? – Snowman

+0

"pytz" öğesinde tanımlanan tüm saat dilimleri, tam olarak bir ülkeye eşlenir. Böylece kırılmaz. – jsalonen

2

Bu kolaydır. Her ülkeyi bir saat dilimleri listesine eşleyen bir dict adresiniz vardır. Her list üyesinin tekrar dict numarasına eşlemek istiyorsunuz.

Sadece cevabı vermek yerine, nasıl elde edeceğimizi görelim. Eğer sadece tek bir saat dilimine göre her ülkeyi haritalama bir dict olsaydı

Birincisi, bu basit bir ters haritalama olacaktır:

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

Ancak bu işe yaramaz; Saat dilimleri listesiyle eşleşiyorsunuz ve o listeden her bir saat dilimini ülkeye geri eşlemek istiyorsunuz. Yani İngiliz açıklaması "o listedeki her zaman dilimi" Python için trivially çevrilebilir şudur: eyleme İşte

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' 

Yan not: Python 2 ve 3-bahsetmedi, Bu yüzden, 3'ü kabul ettiyseniz, iteritems'u items olarak değiştirin ve çıktı, u'CH' yerine 'CH' olacaktır. Farklı ülkelerde aynı saat dilimi adı kullanılıyorsa,

İlgili konular