StackOverflow ma zbyt wiele pytań na temat rozwiązywania strefy czasowej z lokalizacji. Ta wiki społeczności jest próbą skonsolidowania wszystkich poprawnych odpowiedzi.
Zaktualizuj moją odpowiedź lub dodaj własną według własnego uznania.
Pytanie
Biorąc pod uwagę szerokość i długość geograficzną lokalizacji, skąd wiadomo, która strefa czasowa obowiązuje w tej lokalizacji?
W większości przypadków szukamy identyfikatora strefy czasowej IANA / Olson, chociaż niektóre usługi mogą zwracać tylko przesunięcie UTC lub inny identyfikator strefy czasowej. Aby uzyskać szczegółowe informacje, przeczytaj informacje o znaczniku strefy czasowej .
geolocation
timezone
latitude-longitude
Matt Johnson-Pint
źródło
źródło
"Europe/London"
identyfikatorem strefy czasowej bazy danych stref czasowych IANA.Odpowiedzi:
Usługi sieciowe Lokalizacja strefy czasowej
Surowe dane graniczne strefy czasowej
Następujące projekty były wcześniej źródłami danych granicznych strefy czasowej, ale nie są już aktywnie utrzymywane.
Wdrożenia geolokalizacji strefy czasowej offline
Implementacje korzystające z danych konstruktora stref czasowych
Implementacje korzystające ze starszych danych tz_world
Biblioteki wywołujące jedną z usług internetowych
Hostowane usługi sieciowe
Inne pomysły
Zaktualizuj tę listę, jeśli znasz jakieś inne
Należy również pamiętać, że podejście do najbliższego miasta może nie dać „poprawnego” wyniku, a jedynie przybliżenie.
Konwersja do stref systemu Windows
Większość wymienionych metod zwróci identyfikator strefy czasowej IANA. Jeśli chcesz przekonwertować na strefę czasową Windows, aby korzystać z
TimeZoneInfo
klasy w .NET, użyj TimeZoneConverter biblioteki .Nie używaj zone.tab
Baza danych tz zawiera plik o nazwie
zone.tab
. Ten plik służy przede wszystkim do przedstawienia listy stref czasowych, z których użytkownik może wybrać. Obejmuje współrzędne szerokości i długości geograficznej dla punktu odniesienia dla każdej strefy czasowej. Umożliwia to utworzenie mapy z wyróżnieniem tych punktów. Na przykład zobacz interaktywną mapę pokazaną na stronie głównej strefy czasowej .Chociaż może być kuszące, aby użyć tych danych do rozwiązania strefy czasowej na podstawie współrzędnych szerokości i długości geograficznej, należy wziąć pod uwagę, że są to punkty, a nie granice. Najlepsze, co można zrobić, to ustalić najbliższe punktu, który w wielu przypadkach nie będzie właściwym punktem.
Rozważ następujący przykład:
Dwa kwadraty reprezentują różne strefy czasowe, w których czarna kropka na każdym kwadracie jest miejscem odniesienia, na przykład tym, co można znaleźć w zone.tab. Niebieska kropka oznacza lokalizację, dla której próbujemy znaleźć strefę czasową. Oczywiście, ta lokalizacja znajduje się w pomarańczowej strefie po lewej stronie, ale jeśli spojrzymy na najbliższą odległość do punktu odniesienia, rozwiąże się ona w strefie zielonkawej po prawej stronie.
źródło
Co powiesz na to rozwiązanie dla node.js https://github.com/mattbornski/tzwhere
I jego odpowiednik w języku Python: https://github.com/pegler/pytzwhere
źródło
Właśnie w Teleportie zaczęliśmy otwierać nasze interfejsy API, a jedna z przypadków użycia ujawnia również informacje TZ dla współrzędnych.
Na przykład można poprosić o wszystkie nasze dostępne informacje TZ o współrzędne w następujący sposób:
To zwróci następujące
Na przykład użyłem ./jq do parsowania JSON.
źródło
Oto, w jaki sposób możesz użyć edytora skryptów Google, aby uzyskać strefę czasową i strefę czasową w arkuszu gsheet.
Krok 1. Uzyskaj klucz API do interfejsu Google strefy czasowej API
Krok 2. Utwórz nowy arkusz gs. W menu „Narzędzia” kliknij „Edytor skryptów”. Dodaj następujący kod:
Krok 3. Zapisz i opublikuj swoją
getTimezone()
funkcję i użyj jej, jak pokazano na powyższym obrazku.źródło
Możesz użyć pliku geolocator.js aby łatwo uzyskać strefę czasową i więcej ...
Korzysta z interfejsów API Google, które wymagają klucza. Najpierw skonfiguruj geolocator:
Uzyskaj TimeZone, jeśli masz współrzędne:
Przykładowe dane wyjściowe:
Zlokalizuj, a następnie uzyskaj strefę czasową i więcej
Jeśli nie masz współrzędnych, możesz najpierw zlokalizować pozycję użytkownika.
W poniższym przykładzie najpierw spróbujemy użyć interfejsu API geolokalizacji HTML5, aby uzyskać współrzędne. Jeśli zawiedzie lub zostanie odrzucony, otrzyma współrzędne poprzez wyszukiwanie Geo-IP. Wreszcie otrzyma strefę czasową i więcej ...
Przykładowe dane wyjściowe:
źródło
https://en.wikipedia.org/wiki/Great-circle_distance
A oto dobra implementacja wykorzystująca dane JSON: https://github.com/agap/llttz
źródło
ujawnienie: Jestem autorem obrazka dokera opisanego poniżej
Https://github.com/evansiroky/node-geo-tz zapakowałem w bardzo prosty kontener-doker
Możesz uruchomić dokera-kontenera za pomocą
Spowoduje to wyświetlenie usługi wyszukiwania na lokalnym hoście na porcie 3000. Następnie możesz przeprowadzić wyszukiwanie w strefie czasowej
źródło
Wypróbuj ten kod, aby korzystać z interfejsu API Google Time Zone z języka Java z bieżącym klientem czasu NTP i popraw konwersję UTC_Datetime_from_timestamp:
I używaj go z:
źródło
Ok, oto krótka wersja bez poprawnego czasu NTP:
I używaj go z:
źródło
Jeśli chcesz użyć geonames.org, użyj tego kodu. (Ale geonames.org jest czasami bardzo wolny)
I używaj go z:
źródło
Od Guppy:
Metoda związana
America/Anchorage.dst
zDstTzInfo
Ameryka / Anchorage 'LMT-1 dzień, 14:00:00 STD
źródło
Rzeczywiście ważne jest, aby uznać, że jest to bardziej skomplikowany problem, niż większość by się spodziewała. W praktyce wielu z nas jest również gotowych zaakceptować działający zestaw kodu, który działa w „jak największej liczbie przypadków”, w których co najmniej jego krytyczne problemy można zidentyfikować i zminimalizować zbiorowo. Więc zamieszczam to z myślą o tym wszystkim i duchu OP. Wreszcie, praktyczna wartość dla innych, którzy próbują przekonwertować GPS na strefę czasową, a ostatecznym celem jest posiadanie obiektu czasowego wrażliwego na lokalizację (a co ważniejsze, aby poprawić jakość średnich implementacji za pomocą obiektów czasowych pochodzących z tej wiki) co wygenerowałem w Pythonie (prosimy o edycję):
źródło
Istnieje kilka źródeł online, które mają dane geojson dla stref czasowych ( tutaj jest jedno , oto inne)
Użyj biblioteki geometrii, aby utworzyć obiekty wielokątów ze współrzędnych geojsona ( foremny [python], GEOS [c ++], JTS [java], NTS [.net]).
Konwertuj swoje lat / lng na obiekt punktowy (jednak twoja biblioteka to reprezentuje) i sprawdź, czy przecina on wielokąt strefy czasowej.
źródło
używając szerokości i długości geograficznej uzyskaj strefę czasową bieżącej lokalizacji poniżej kodu, działało dla mnie
źródło
Dla tych z nas, którzy używają Javascript i chcą uzyskać strefę czasową z kodu pocztowego za pośrednictwem interfejsów API Google , oto jedna metoda.
Uwaga: rozumiem, że kody pocztowe nie są unikalne we wszystkich krajach, więc najlepiej nadaje się do użytku w USA.
źródło
źródło
Jeśli wolisz unikać usługi internetowej, możesz pobrać te informacje z przeglądarki w następujący sposób:
W moim obecnym przypadku jest to drukowanie:
Pełna data: 27.01.2014 16: 53: 37 Przesunięcie UTC : Strefa czasowa kodu kraju UTC-3 : BRT
Mam nadzieję, że to może być pomocne.
źródło