Ada terlalu banyak pertanyaan di StackOverflow tentang penyelesaian zona waktu dari suatu lokasi. Wiki komunitas ini merupakan upaya untuk menggabungkan semua respons yang valid.
Harap perbarui jawaban saya, atau tambahkan jawaban Anda sesuai keinginan Anda.
Pertanyaan
Mengingat lintang dan bujur dari suatu lokasi, bagaimana seseorang mengetahui zona waktu apa yang berlaku di lokasi itu?
Dalam kebanyakan kasus, kami mencari id zona waktu IANA / Olson, meskipun beberapa layanan mungkin mengembalikan hanya offset UTC, atau beberapa pengidentifikasi zona waktu lainnya. Silakan baca info tag zona waktu untuk detailnya.
geolocation
timezone
latitude-longitude
Matt Johnson-Pint
sumber
sumber
"Europe/London"
pengidentifikasi zona waktu yang sama dari basis data zona waktu IANA.Jawaban:
Layanan Web Lokasi Zona Waktu
Data Batas Zona Waktu Baku
Proyek-proyek berikut sebelumnya merupakan sumber data batas zona waktu, tetapi tidak lagi dipelihara secara aktif.
Implementasi Offline Geolokasi Zona Waktu
Implementasi yang menggunakan data Timezone Boundary Builder
Implementasi yang menggunakan data tz_world yang lebih lama
Perpustakaan yang memanggil salah satu layanan web
Layanan web yang di-hosting sendiri
Gagasan lain
Perbarui daftar ini jika Anda mengetahui orang lain
Juga, perhatikan bahwa pendekatan kota terdekat mungkin tidak menghasilkan hasil "benar", hanya perkiraan.
Konversi Ke Zona Windows
Sebagian besar metode yang tercantum akan mengembalikan id zona waktu IANA. Jika Anda perlu mengonversi ke zona waktu Windows untuk digunakan dengan
TimeZoneInfo
kelas di .NET, gunakan perpustakaan TimeZoneConverter .Jangan gunakan zone.tab
Basis data tz termasuk file yang disebut
zone.tab
. File ini terutama digunakan untuk menyajikan daftar zona waktu bagi pengguna untuk memilih. Ini mencakup koordinat lintang dan bujur untuk titik referensi untuk setiap zona waktu. Ini memungkinkan peta dibuat dengan menyoroti titik-titik ini. Misalnya, lihat peta interaktif yang diperlihatkan di laman beranda time-timezone .Meskipun mungkin tergoda untuk menggunakan data ini untuk menyelesaikan zona waktu dari koordinat lintang dan bujur, pertimbangkan bahwa ini adalah titik - bukan batas. Yang terbaik yang bisa dilakukan adalah menentukan titik terdekat , yang dalam banyak kasus tidak akan menjadi titik yang benar.
Perhatikan contoh berikut:
Dua kotak mewakili zona waktu yang berbeda, di mana titik hitam di setiap kotak adalah lokasi referensi, seperti apa yang dapat ditemukan di zone.tab. Titik biru mewakili lokasi yang kami coba temukan zona waktu untuk. Jelas, lokasi ini berada dalam zona oranye di sebelah kiri, tetapi jika kita hanya melihat jarak terdekat ke titik referensi, itu akan menyelesaikan ke zona kehijauan di sebelah kanan.
sumber
Bagaimana dengan solusi ini untuk node.js https://github.com/mattbornski/tzwhere
Dan mitra Python-nya: https://github.com/pegler/pytzwhere
sumber
Kami di Teleport baru mulai membuka API kami dan salah satu usecases juga mengekspos informasi TZ untuk koordinat.
Misalnya, seseorang dapat meminta semua informasi TZ kami yang tersedia untuk koordinat dengan cara berikut:
Ini akan mengembalikan yang berikut
Sebagai contoh saya menggunakan ./jq untuk parsing JSON.
sumber
Inilah cara Anda dapat menggunakan editor skrip Google untuk mendapatkan timezoneName dan timeZoneId di dalam gsheet.
Langkah 1. Dapatkan kunci API untuk API zona waktu Google
Langkah 2. Buat gsheet baru. Di bawah menu 'alat' klik 'editor skrip'. Tambahkan kode berikut:
Langkah 3. Simpan dan publikasikan
getTimezone()
fungsi Anda dan gunakan seperti yang ditunjukkan pada gambar di atas.sumber
Anda dapat menggunakan geolocator.js untuk mendapatkan zona waktu dengan mudah dan banyak lagi ...
Ini menggunakan Google API yang membutuhkan kunci. Jadi, pertama-tama Anda mengkonfigurasi geolocator:
Dapatkan TimeZone jika Anda memiliki koordinat:
Contoh output:
Temukan kemudian dapatkan TimeZone dan lainnya
Jika Anda tidak memiliki koordinat, Anda dapat menemukan posisi pengguna terlebih dahulu.
Contoh di bawah ini pertama-tama akan mencoba API Geolokasi HTML5 untuk mendapatkan koordinat. Jika gagal atau ditolak, itu akan mendapatkan koordinat melalui pencarian Geo-IP. Akhirnya, itu akan mendapatkan zona waktu dan banyak lagi ...
Contoh output:
sumber
https://en.wikipedia.org/wiki/Great-circle_distance
Dan ini adalah implementasi yang bagus menggunakan data JSON: https://github.com/agap/llttz
sumber
pengungkapan: Saya adalah penulis gambar buruh pelabuhan yang dijelaskan di bawah ini
Saya telah membungkus https://github.com/evansiroky/node-geo-tz dalam wadah buruh pelabuhan yang sangat sederhana
Anda dapat memulai docker-container dengan
Ini memperlihatkan layanan pencarian di host lokal Anda pada port 3000. Selanjutnya Anda dapat melakukan pencarian zona waktu
sumber
Coba kode ini untuk menggunakan Google Time Zone API dari Java dengan NTP Time Client saat ini dan perbaiki konversi UTC_Datetime_from_timestamp:
Dan gunakan dengan:
sumber
Ok di sini adalah versi singkat tanpa Waktu NTP yang benar:
Dan gunakan dengan:
sumber
Jika Anda ingin menggunakan geonames.org maka gunakan kode ini. (Tapi terkadang geonames.org sangat lambat)
Dan gunakan dengan:
sumber
Dari Guppy:
Metode Bound
America/Anchorage.dst
dariDstTzInfo
America / Anchorage 'LMT-1 hari, 14:00:00 STD
sumber
Memang penting untuk menyadari bahwa ini masalah yang lebih rumit daripada yang diduga kebanyakan orang. Dalam praktiknya banyak dari kita juga bersedia menerima seperangkat kode yang berfungsi untuk "sebanyak mungkin kasus", di mana setidaknya masalah fatalnya dapat diidentifikasi dan diminimalkan secara kolektif. Jadi saya memposting ini dengan semua itu dan semangat OP dalam pikiran. Akhirnya, untuk nilai praktis kepada orang lain yang mencoba mengubah GPS ke zona waktu dengan tujuan akhir memiliki objek waktu yang peka terhadap lokasi (dan yang lebih penting untuk membantu meningkatkan kualitas implementasi rata-rata dengan objek waktu yang mengikuti wiki ini) di sini adalah apa yang saya hasilkan dengan Python (silakan diedit):
sumber
Ada beberapa sumber daring yang memiliki data geojson untuk zona waktu ( inilah satu , berikut yang lain)
Gunakan perpustakaan geometri untuk membuat objek polygon dari koordinat GeoJSON ( rupawan [python], GEOS [c ++], JTS [java], NTS [Net]).
Konversikan lat / lng Anda menjadi objek titik (namun perpustakaan Anda menyatakannya) dan periksa apakah itu memotong poligon zona waktu.
sumber
dengan menggunakan lintang dan bujur dapatkan zona waktu dari lokasi saat ini di bawah kode bekerja untuk saya
sumber
Bagi kita yang menggunakan Javascript dan mencari untuk mendapatkan zona waktu dari kode pos melalui Google API , berikut adalah salah satu metode.
Catatan: pemahaman saya adalah bahwa kode pos tidak unik di berbagai negara, jadi ini mungkin paling cocok untuk digunakan di AS.
sumber
sumber
Jika Anda lebih suka menghindari layanan web, Anda dapat mengambil informasi itu dari browser seperti ini:
Dalam kasus saya saat ini sedang mencetak:
Tanggal Lengkap: 27/01/2014 16: 53: 37 UTC Offset: UTC-3 Kode Negara Zona Waktu: BRT
Semoga bisa bermanfaat.
sumber