2012-10-22 9 views
9

Ich verwende pytz. Ich habe das gesamte Dokumentationsblatt durchgelesen, aber ich habe nicht gesehen, wie das gemacht werden kann.Ländercode für Zeitzone mit Pytz erhalten?

Ich habe eine Zeitzone: America/Chicago. Alles, was ich will, ist, den entsprechenden Ländercode für diese Zeitzone zu bekommen: US.

Es zeigt, dass ich das Gegenteil tun, wie zum Beispiel:

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

aber ich brauche um es anders zu tun.

Kann dies in Python getan werden, mit Pytz (oder auf irgendeine andere Weise)?

Antwort

9

Sie können das country_timezones Objekt aus pytz und eine inverse Mapping erzeugen:

gerade jetzt das resultierende Lexikon nutzen:

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

es würde brechen, wenn der gleiche Zeitzone Name in verschiedenen Ländern verwendet wird. Solche Namen gibt es in 'country_timezones' nicht. Aber einige gemeinsame Zeitzonen sind nicht drin, z. B. UTC, US/Central, US/Eastern, Kanada/Central usw. – jfs

+0

@ J.F.Sebastian was meintest du mit deinem letzten Satz? Diese Zeitzonen sind nicht in was? – Snowman

+0

Alle in 'pytz' definierten Zeitzonen entsprechen genau einem Land. Somit bricht es nicht. – jsalonen

2

Das ist einfach. Sie haben eine dict Zuordnung jedes Land zu einer Liste von Zeitzonen. Sie möchten jedes list-Mitglied wieder zu dem dict zuordnen.

Anstatt nur die Antwort zu geben, mal sehen, wie man es bekommt.

Erstens, wenn Sie nur ein dict haben Abbilden jedes Landes zu einer einzigen Zeitzone, würde dies ein einfaches Reverse Mapping sein:

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

Aber das wird nicht funktionieren; Sie haben eine Zuordnung zu einer Liste von Zeitzonen und möchten, dass jede Zeitzone in dieser Liste dem Land zugeordnet wird. Die englische "jede Zeitzone in der Liste" ist trivialer übersetzbar zu Python:

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

Hier in Aktion:

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

Randbemerkung: Sie haben nicht Python 2 vs. 3 erwähnen, Also habe ich 2. angenommen. Wenn Sie auf 3 sind, ändern Sie iteritems zu items, und die Ausgabe wird 'CH' statt sein.

Verwandte Themen