In StackOverflow gibt es zu viele Fragen zum Auflösen einer Zeitzone von einem Standort aus. Dieses Community-Wiki ist ein Versuch, alle gültigen Antworten zu konsolidieren.
Bitte aktualisieren Sie meine Antwort oder fügen Sie Ihre eigene hinzu, wie Sie es für richtig halten.
Die Frage
Woher weiß man angesichts der Breite und Länge eines Ortes, welche Zeitzone an diesem Ort wirksam ist?
In den meisten Fällen suchen wir nach einer IANA / Olson-Zeitzonen-ID, obwohl einige Dienste möglicherweise nur einen UTC-Offset oder eine andere Zeitzonen-ID zurückgeben. Bitte lesen Sie die Informationen zum Zeitzonen-Tag für Details.
geolocation
timezone
latitude-longitude
Matt Johnson-Pint
quelle
quelle
"Europe/London"
Zeitzonen-ID der IANA-Zeitzonendatenbank abgedeckt .Antworten:
Zeitzonenstandort-Webdienste
Rohe Zeitzonengrenzdaten
Die folgenden Projekte waren zuvor Quellen für Zeitzonengrenzdaten, werden jedoch nicht mehr aktiv verwaltet.
Offline-Implementierungen für die Geolokalisierung von Zeitzonen
Implementierungen, die die Timezone Boundary Builder-Daten verwenden
Implementierungen, die die älteren tz_world-Daten verwenden
Bibliotheken, die einen der Webdienste aufrufen
Selbst gehostete Webdienste
Andere Ideen
Bitte aktualisieren Sie diese Liste, wenn Sie andere kennen
Beachten Sie auch, dass der Ansatz der nächsten Stadt möglicherweise nicht das "richtige" Ergebnis liefert, sondern nur eine Annäherung.
Konvertierung in Windows-Zonen
Die meisten der aufgeführten Methoden geben eine IANA-Zeitzonen-ID zurück. Wenn Sie zur Verwendung mit der
TimeZoneInfo
Klasse in .NET in eine Windows-Zeitzone konvertieren müssen , verwenden Sie den TimeZoneConverter Bibliothek.Verwenden Sie nicht zone.tab
Die tz-Datenbank enthält eine Datei namens
zone.tab
. Diese Datei wird hauptsächlich verwendet, um eine Liste von Zeitzonen anzuzeigen, aus denen ein Benutzer auswählen kann. Es enthält die Breiten- und Längenkoordinaten für den Bezugspunkt für jede Zeitzone. Auf diese Weise kann eine Karte erstellt werden, in der diese Punkte hervorgehoben werden. Sehen Sie sich beispielsweise die interaktive Karte an, die auf der Homepage für die Moment-Zeitzone angezeigt wird .Obwohl es möglicherweise verlockend ist, diese Daten zum Auflösen der Zeitzone aus Breiten- und Längengradkoordinaten zu verwenden, sollten Sie berücksichtigen, dass dies Punkte und keine Grenzen sind. Das Beste, was man tun könnte, wäre, den nächsten zu bestimmen Punkt , der in vielen Fällen nicht der richtige Punkt ist.
Betrachten Sie das folgende Beispiel:
Die beiden Quadrate stellen unterschiedliche Zeitzonen dar, wobei der schwarze Punkt in jedem Quadrat der Referenzort ist, z. B. was in zone.tab zu finden ist. Der blaue Punkt steht für den Ort, für den wir eine Zeitzone suchen. Diese Position befindet sich eindeutig innerhalb der orangefarbenen Zone auf der linken Seite. Wenn wir jedoch nur den nächstgelegenen Abstand zum Referenzpunkt betrachten, wird sie in die grünliche Zone auf der rechten Seite aufgelöst.
quelle
Wie wäre es mit dieser Lösung für node.js https://github.com/mattbornski/tzwhere
Und sein Python-Gegenstück: https://github.com/pegler/pytzwhere
quelle
Wir bei Teleport haben gerade damit begonnen , unsere APIs zu öffnen, und einer der Anwendungsfälle besteht darin, TZ-Informationen für Koordinaten bereitzustellen.
Zum Beispiel könnte man alle unsere verfügbaren TZ-Informationen für Koordinaten auf folgende Weise anfordern:
Dies würde Folgendes zurückgeben
Für das Beispiel habe ich ./jq für das JSON-Parsing verwendet.
quelle
So können Sie den Skripteditor von Google verwenden, um den Zeitzonennamen und die Zeitzonen-ID in einem Gsheet abzurufen.
Schritt 1. Holen Sie sich einen API-Schlüssel für die Zeitzonen-API von Google
Schritt 2. Erstellen Sie ein neues gsheet. Klicken Sie unter dem Menü "Werkzeuge" auf "Skripteditor". Fügen Sie den folgenden Code hinzu:
Schritt 3. Speichern und veröffentlichen Sie Ihre
getTimezone()
Funktion und verwenden Sie sie wie im obigen Bild gezeigt.quelle
Sie können geolocator.js verwenden um auf einfache Weise Zeitzonen und mehr zu erhalten ...
Es werden Google-APIs verwendet, für die ein Schlüssel erforderlich ist. Zuerst konfigurieren Sie den Geolocator:
Holen Sie sich TimeZone, wenn Sie die Koordinaten haben:
Beispielausgabe:
Suchen Sie dann TimeZone und mehr
Wenn Sie die Koordinaten nicht haben, können Sie zuerst die Benutzerposition suchen.
Im folgenden Beispiel wird zunächst die HTML5-Geolocation-API ausprobiert, um die Koordinaten abzurufen. Wenn es fehlschlägt oder abgelehnt wird, werden die Koordinaten über die Geo-IP-Suche abgerufen. Endlich bekommt es die Zeitzone und mehr ...
Beispielausgabe:
quelle
https://en.wikipedia.org/wiki/Great-circle_distance
Und hier ist eine gute Implementierung mit JSON-Daten: https://github.com/agap/llttz
quelle
Offenlegung: Ich bin der Autor des unten beschriebenen Docker-Bildes
Ich habe https://github.com/evansiroky/node-geo-tz in einen sehr einfachen Docker-Container verpackt
Sie können den Docker-Container mit starten
Dadurch wird der Suchdienst auf Ihrem lokalen Host an Port 3000 verfügbar gemacht. Anschließend können Sie eine Zeitzonensuche nach durchführen
quelle
Probieren Sie diesen Code aus, um die Google Time Zone API von Java mit dem aktuellen NTP Time Client zu verwenden und die UTC_Datetime_from_timestamp-Konvertierung zu korrigieren:
Und benutze es mit:
quelle
Ok hier ist die Kurzversion ohne korrekte NTP-Zeit:
Und benutze es mit:
quelle
Wenn Sie geonames.org verwenden möchten, verwenden Sie diesen Code. (Aber geonames.org ist manchmal sehr langsam)
Und benutze es mit:
quelle
Von Guppy:
Gebundene Methode
America/Anchorage.dst
vonDstTzInfo
America / Anchorage 'LMT-1 Tag, 14:00:00 STD
quelle
Es ist in der Tat wichtig zu erkennen, dass dies ein komplizierteres Problem ist, als die meisten vermuten würden. In der Praxis sind viele von uns auch bereit, einen funktionierenden Satz von Code zu akzeptieren, der für "so viele Fälle wie möglich" funktioniert, in denen zumindest die schwerwiegenden Probleme gemeinsam identifiziert und minimiert werden können. Also poste ich dies mit all dem und dem Geist des OP im Auge. Der praktische Nutzen für andere, die versuchen, GPS in eine Zeitzone umzuwandeln, mit dem Endziel, ein ortsabhängiges Zeitobjekt zu haben (und vor allem, um die Qualität durchschnittlicher Implementierungen mit Zeitobjekten zu verbessern, die aus diesem Wiki folgen), ist hier Was ich in Python generiert habe (bitte bearbeiten Sie es):
quelle
Es gibt mehrere Online-Quellen, die Geojson-Daten für Zeitzonen enthalten ( hier eine , hier eine andere).
Verwenden eine Geometriebibliothek Polygon Objekte aus den Koordinaten GeoJSON zu erstellen ( wohlgeformt [Python], GEOS [C ++], JTS [Java], NTS [NET]).
Konvertieren Sie Ihr lat / lng in ein Punktobjekt (wie auch immer Ihre Bibliothek dies darstellt) und prüfen Sie, ob es das Zeitzonenpolygon schneidet.
quelle
Durch die Verwendung von Längen- und Breitengrad erhalten Sie die Zeitzone des aktuellen Standorts unter dem Code, der für mich funktioniert hat
quelle
Für diejenigen von uns, die Javascript verwenden und eine Zeitzone von einer Postleitzahl über Google APIs abrufen möchten , ist hier eine Methode.
Hinweis: Meines Wissens nach sind Postleitzahlen nicht länderübergreifend eindeutig, daher ist dies wahrscheinlich am besten für die Verwendung in den USA geeignet.
quelle
quelle
Wenn Sie einen Webdienst lieber vermeiden möchten, können Sie diese Informationen wie folgt aus dem Browser abrufen:
In meinem aktuellen Fall wird gedruckt:
Volles Datum: 27.01.2014 16: 53: 37 UTC Versatz: UTC-3 Ländercode Zeitzone: BRT
Hoffe es kann hilfreich sein.
quelle