Erhalte Zeitzone von Stadt in Python / Django

8

Mit pytz kann ich eine Liste von Zeitzonen wie folgt erhalten:

%Vor%

Da ich vom Benutzer sowohl Land- als auch Stadtfelder erhalte, wie kann ich die Zeitzone für die Stadt bestimmen?

    
super9 12.05.2013, 08:25
quelle

6 Antworten

19

pytz ist ein Wrapper um die IANA Time Zone Database (Olson-Datenbank). Es enthält keine Daten, um eine beliebige Stadt auf der Welt der Zeitzone zuzuordnen, in der sie sich befindet.

Möglicherweise benötigen Sie einen Geocoder wie geopy , mit dem ein Ort (z. B. ein Stadtname) in seine Koordinaten übersetzt werden kann (Breite, Länge) mit verschiedenen Web-Services:

%Vor%

Die geographische Breite und Länge der Stadt geben die Zeitzone mit tz_world, einer efele.net/tz Map / einem Shapefile an der TZ-Zeitzonen der Welt zB über postgis timezone db oder pytzwhere :

%Vor%

Es gibt auch Web-Dienste, die es erlauben, (Breite, Länge) in eine Zeitzone zu konvertieren, zB askgeo , geonames , siehe Zeitzonen-Suche von Breitengrad Länge .

Als @dashesy wies in dem Kommentar darauf hin, geopy kann auch Zeitzone finden (seit 1.2):

%Vor%

GeoNames bietet auch Offline-Daten , die es ermöglichen, die Zeitzone der Stadt direkt von ihrem Namen zu erhalten, z. B .:

%Vor%

Ausgabe

%Vor%     
jfs 13.05.2013 09:41
quelle
1

Es gibt keine triviale Möglichkeit, dies zu tun, was bedauerlich ist. Geonames zeichnet eine Liste aller Städte zusammen mit dem Namen ihrer Zeitzone auf. Dies wäre eine gute Wahl, aber Sie müssen analysieren und bauen Sie Ihre eigene Datenbank, so dass Sie jederzeit die Zeitzone von einem Land / Stadt-Paar leicht finden können.

    
Steve K 12.05.2013 17:23
quelle
0

Ich denke, dass Sie die Zeitzonendatenbank für die Stadt, die Sie suchen, manuell durchsuchen müssen:

%Vor%

(das ist nur eine schnelle Lösung, es versucht beispielsweise nicht, nur dem Stadt-Teil einer Zeitzone zu entsprechen - versuche nach Europe zu suchen, es tut Teilstring-Übereinstimmungen, sucht nicht nach Groß- und Kleinschreibung) unempfindlich usw.)

    
robertklep 12.05.2013 09:51
quelle
0

Am Ende habe ich das mit ein paar Google API-Aufrufen gelöst, indem ich requests verwendet und den JSON analysiert habe. Ich konnte es ohne API-Schlüssel tun, weil ich nie ihre Nutzungsgrenzen erreichen werde.

Ссылка

Ich hoffe, das hilft.

    
Will Charlton 28.09.2015 15:10
quelle
0

Es gab viele mögliche Lösungen hier vorgeschlagen und sie sind alle ein bisschen mühsam einzurichten.

Um die Dinge für die nächste Person mit diesem Problem schneller zu machen, nahm ich die von Will Charlton und machte daraus eine schnelle Python-Bibliothek: Ссылка

%Vor%

Ruft Sie datetime.datetime(2002, 10, 27, 6, 0, tzinfo=<DstTzInfo 'Europe/Berlin' CET+1:00:00 STD>) .

Dadurch erhalten Sie ein Pytz-Objekt ( tz in dem Beispiel), so dass Sie es pythonisch verwenden können.

  • Es verwendet die Google API
  • Lässt Sommerzeit-Berechnung zu pytz, nur ein Anruf pro Stadt, Ruhe geschieht offline
  • LRU speichert die Anfragen zwischen, so dass Sie das API-Limit nicht einfach erreichen sollten
  • Sollte auch mit jeder Adresse funktionieren oder irgendetwas, was Google Maps versteht
Lasse Schuirmann 21.02.2017 15:18
quelle
-1

@ robertkleps Ansatz funktioniert wahrscheinlich.

Aber hier ist ein weiterer möglicher Ansatz mit astral - Ссылка

%Vor%     
Calvin Cheng 12.05.2013 12:24
quelle

Tags und Links