2012-10-22 39 views
9

Tôi đang sử dụng pytz. Tôi đã đọc qua toàn bộ trang tài liệu, nhưng không thấy cách này có thể được thực hiện.Lấy mã quốc gia cho múi giờ bằng cách sử dụng pytz?

Tôi có múi giờ: America/Chicago. Tất cả những gì tôi muốn là lấy mã quốc gia tương ứng cho múi giờ này: Hoa Kỳ.

Nó cho thấy rằng tôi có thể làm điều ngược lại, chẳng hạn như:

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

nhưng tôi cần phải làm điều đó theo cách khác xung quanh.

Điều này có thể được thực hiện bằng Python, sử dụng pytz (hoặc bất kỳ cách nào khác cho vấn đề đó) không?

Trả lời

9

Bạn có thể sử dụng đối tượng country_timezones từ pytz và tạo ra một bản đồ nghịch đảo:

Bây giờ chỉ cần sử dụng từ điển kết quả:

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

nó sẽ bị hỏng nếu cùng một tên múi giờ được sử dụng ở các quốc gia khác nhau. Không có tên như vậy trong 'country_timezones'. Tuy nhiên, một số múi giờ phổ biến không có trong đó, ví dụ: UTC, Hoa Kỳ/Trung tâm, Hoa Kỳ/Miền Đông, Canada/Trung tâm, v.v. – jfs

+0

@ J.F.Sebastian, ý của bạn là gì? Những múi giờ đó không ở trong cái gì? – Snowman

+0

Tất cả các múi giờ được xác định trong bản đồ 'pytz' đến đúng một quốc gia. Vì vậy, nó không phá vỡ. – jsalonen

2

này rất dễ dàng. Bạn có một dict ánh xạ từng quốc gia thành danh sách các múi giờ. Bạn muốn ánh xạ mỗi thành viên list trở lại số dict.

Thay vì chỉ trả lời, hãy xem cách tải xuống.

Thứ nhất, nếu bạn chỉ có một dict lập bản đồ mỗi nước đến một múi giờ duy nhất, điều này sẽ là một ánh xạ ngược đơn giản:

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

Nhưng điều này sẽ không hoạt động; bạn có ánh xạ tới danh sách múi giờ và bạn muốn mỗi múi giờ trong danh sách đó ánh xạ trở lại quốc gia. Đó là mô tả tiếng Anh "mỗi timezone trong danh sách" đang trivially thể dịch để Python:

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

Đây rồi trong hành động:

>>> 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' 

Side lưu ý: Bạn đã không đề cập Python 2 vs 3, vì vậy tôi giả định 2. Nếu bạn đang ở trên 3, hãy thay đổi iteritems thành items và đầu ra sẽ là 'CH' thay vì u'CH'.

Các vấn đề liên quan