Il y a trop de questions sur StackOverflow sur la résolution d'un fuseau horaire à partir d'un emplacement. Ce wiki communautaire est une tentative de consolider toutes les réponses valides.
Veuillez mettre à jour ma réponse ou ajouter la vôtre comme bon vous semble.
La question
Compte tenu de la latitude et de la longitude d'un lieu, comment savoir quel fuseau horaire est en vigueur à cet endroit?
Dans la plupart des cas, nous recherchons un identifiant de fuseau horaire IANA / Olson, bien que certains services puissent renvoyer uniquement un décalage UTC ou un autre identifiant de fuseau horaire. Veuillez lire les informations de balise de fuseau horaire pour plus de détails.
geolocation
timezone
latitude-longitude
Matt Johnson-Pint
la source
la source
"Europe/London"
identifiant de fuseau horaire de la base de données de fuseaux horaires IANA.Réponses:
Services Web de localisation de fuseau horaire
Données limites du fuseau horaire brut
Les projets suivants étaient auparavant des sources de données sur les limites de fuseau horaire, mais ne sont plus activement maintenus.
Implémentations hors ligne de géolocalisation de fuseau horaire
Implémentations qui utilisent les données du générateur de limites de fuseau horaire
Implémentations qui utilisent les anciennes données tz_world
Bibliothèques qui appellent l'un des services Web
Services Web auto-hébergés
Autres idées
Veuillez mettre à jour cette liste si vous en connaissez d'autres
Notez également que l'approche de la ville la plus proche peut ne pas donner le résultat «correct», juste une approximation.
Conversion en zones Windows
La plupart des méthodes répertoriées renverront un identifiant de fuseau horaire IANA. Si vous devez convertir un fuseau horaire Windows pour une utilisation avec la
TimeZoneInfo
classe dans .NET, utilisez la bibliothèque TimeZoneConverter .N'utilisez pas zone.tab
La base de données tz comprend un fichier appelé
zone.tab
. Ce fichier est principalement utilisé pour présenter une liste de fuseaux horaires parmi lesquels un utilisateur peut choisir. Il comprend les coordonnées de latitude et de longitude pour le point de référence pour chaque fuseau horaire. Cela permet de créer une carte mettant en évidence ces points. Par exemple, consultez la carte interactive affichée sur la page d'accueil du fuseau horaire .Bien qu'il puisse être tentant d'utiliser ces données pour résoudre le fuseau horaire à partir des coordonnées de latitude et de longitude, considérez qu'il s'agit de points - pas de frontières. Le mieux serait de déterminer le point le plus proche , qui dans de nombreux cas ne sera pas le bon.
Prenons l'exemple suivant:
Les deux carrés représentent des fuseaux horaires différents, où le point noir dans chaque carré est l'emplacement de référence, comme ce qui peut être trouvé dans zone.tab. Le point bleu représente l'emplacement pour lequel nous essayons de trouver un fuseau horaire. De toute évidence, cet emplacement se trouve dans la zone orange à gauche, mais si nous regardons simplement la distance la plus proche du point de référence, il se résoudra en zone verdâtre à droite.
la source
Que diriez-vous de cette solution pour node.js https://github.com/mattbornski/tzwhere
Et son homologue Python: https://github.com/pegler/pytzwhere
la source
Chez Teleport vient de commencer l' ouverture de nos API de et l' un des usecases expose également des informations TZ pour les coordonnées.
Par exemple, on pourrait demander toutes nos informations TZ disponibles pour les coordonnées de la manière suivante:
Cela retournerait ce qui suit
Pour l'exemple, j'ai utilisé ./jq pour l'analyse JSON.
la source
Voici comment vous pouvez utiliser l'éditeur de script de Google pour obtenir le timezoneName et le timeZoneId dans une feuille de calcul.
Étape 1. Obtenez une clé d'API pour l'API de fuseau horaire de Google
Étape 2. Créez une nouvelle feuille de calcul. Sous le menu «outils», cliquez sur «éditeur de script». Ajoutez le code suivant:
Étape 3. Enregistrez et publiez votre
getTimezone()
fonction et utilisez-la comme indiqué dans l'image ci-dessus.la source
Vous pouvez utiliser geolocator.js pour obtenir facilement le fuseau horaire et plus encore ...
Il utilise des API Google qui nécessitent une clé. Donc, vous configurez d'abord le géolocalisateur:
Obtenez TimeZone si vous avez les coordonnées:
Exemple de sortie:
Localisez puis obtenez TimeZone et plus
Si vous n'avez pas les coordonnées, vous pouvez d'abord localiser la position de l'utilisateur.
L'exemple ci-dessous va d'abord essayer l'API de géolocalisation HTML5 pour obtenir les coordonnées. S'il échoue ou est rejeté, il obtiendra les coordonnées via la recherche Geo-IP. Enfin, il obtiendra le fuseau horaire et plus encore ...
Exemple de sortie:
la source
https://en.wikipedia.org/wiki/Great-circle_distance
Et voici une bonne implémentation en utilisant les données JSON: https://github.com/agap/llttz
la source
divulgation: je suis l'auteur de l'image docker décrite ci-dessous
J'ai enveloppé https://github.com/evansiroky/node-geo-tz dans un docker-container très simple
Vous pouvez démarrer le docker-container avec
Cela expose le service de recherche sur votre hôte local sur le port 3000. Vous pouvez ensuite effectuer une recherche de fuseau horaire en
la source
Essayez ce code pour utiliser l'API Google Time Zone de Java avec le client horaire NTP actuel et corriger la conversion UTC_Datetime_from_timestamp:
Et utilisez-le avec:
la source
Ok voici la version courte sans heure NTP correcte:
Et utilisez-le avec:
la source
Si vous souhaitez utiliser geonames.org, utilisez ce code. (Mais geonames.org est parfois très lent)
Et utilisez-le avec:
la source
De Guppy:
Méthode liée
America/Anchorage.dst
deDstTzInfo
America / Anchorage 'LMT-1 jour, 14:00:00 STD
la source
Il est en effet important de reconnaître qu'il s'agit d'un problème plus compliqué que la plupart ne le soupçonnent. Dans la pratique, beaucoup d'entre nous sont également prêts à accepter un ensemble de codes de travail qui fonctionne pour "autant de cas que possible", où au moins ses problèmes fatals peuvent être identifiés et minimisés collectivement. Je poste donc ceci avec tout cela et l'esprit du PO à l'esprit. Enfin, pour une valeur pratique pour ceux qui essaient de convertir le GPS en fuseau horaire dans le but final d'avoir un objet temporel sensible à l'emplacement (et plus important encore pour aider à améliorer la qualité des implémentations moyennes avec les objets temporels qui suivent à partir de ce wiki), voici ce que j'ai généré en Python (n'hésitez pas à le modifier):
la source
Il existe plusieurs sources en ligne qui contiennent des données géographiques pour les fuseaux horaires (en voici une , en voici une autre)
Utiliser une bibliothèque de géométrie pour créer des objets de polygone à partir des coordonnées de GeoJSON ( galbe [python], GEOS [C ++], JTS [java], NTS [.net]).
Convertissez votre lat / lng en un objet ponctuel (mais votre bibliothèque le représente) et vérifiez s'il intersecte le polygone de fuseau horaire.
la source
en utilisant la latitude et la longitude obtenir le fuseau horaire de l'emplacement actuel sous le code a fonctionné pour moi
la source
Pour ceux d'entre nous qui utilisent Javascript et cherchent à obtenir un fuseau horaire à partir d'un code postal via les API Google , voici une méthode.
Remarque: je crois comprendre que les codes postaux ne sont pas uniques d'un pays à l'autre, c'est donc probablement le mieux adapté pour une utilisation aux États-Unis.
la source
la source
Si vous préférez éviter un service Web, vous pouvez récupérer ces informations à partir du navigateur comme ceci:
Dans mon cas actuel, il imprime:
Date complète: 27/01/2014 16: 53: 37 Décalage UTC : Code de pays UTC-3 Fuseau horaire: BRT
J'espère que cela peut être utile.
la source