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:
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
:
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):
GeoNames bietet auch Offline-Daten , die es ermöglichen, die Zeitzone der Stadt direkt von ihrem Namen zu erhalten, z. B .:
%Vor%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.
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.)
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.
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.
@ robertkleps Ansatz funktioniert wahrscheinlich.
Aber hier ist ein weiterer möglicher Ansatz mit astral
- Ссылка