Sumber utama data untuk konversi antara Windows dan pengidentifikasi zona waktu IANA adalah windowsZones.xml
file, didistribusikan sebagai bagian dari proyek Unicode CLDR . Versi dev terbaru dapat ditemukan di sini .
Namun , CLDR dirilis hanya dua kali setahun. Ini, bersama dengan irama berkala pembaruan Windows, dan pembaruan tidak teratur dari basis data zona waktu IANA, membuatnya rumit untuk hanya menggunakan data CLDR secara langsung. Ingatlah bahwa perubahan zona waktu dilakukan atas keinginan berbagai pemerintah di dunia, dan tidak semua perubahan dilakukan dengan pemberitahuan yang cukup untuk menjadikannya dalam siklus rilis ini sebelum tanggal efektif masing-masing.
Ada beberapa kasus tepi lainnya yang perlu ditangani yang tidak dicakup secara ketat oleh CLDR, dan yang baru muncul dari waktu ke waktu. Oleh karena itu, saya telah merangkum kerumitan solusi ke dalam perpustakaan mikro TimeZoneConverter , yang dapat diinstal dari Nuget.
Menggunakan perpustakaan ini sederhana. Berikut adalah beberapa contoh konversi:
string tz = TZConvert.IanaToWindows("America/New_York");
// Result: "Eastern Standard Time"
string tz = TZConvert.WindowsToIana("Eastern Standard Time");
// result: "America/New_York"
string tz = TZConvert.WindowsToIana("Eastern Standard Time", "CA");
// result: "America/Toronto"
Ada lebih banyak contoh di situs proyek .
Penting untuk diketahui bahwa sementara zona waktu IANA dapat dipetakan ke zona waktu Windows tunggal, kebalikannya tidak benar. Satu zona waktu Windows mungkin dipetakan ke lebih dari satu zona waktu IANA. Ini dapat dilihat pada contoh di atas, di mana Eastern Standard Time
dipetakan untuk keduanya America/New_York
, dan untuk America/Toronto
. TimeZoneConverter akan memberikan yang ditandai oleh CLDR "001"
, yang dikenal sebagai "zona emas", kecuali jika Anda secara spesifik memberikan kode negara dan ada kecocokan untuk zona berbeda di negara itu.
Catatan: Jawaban ini telah berkembang selama bertahun-tahun, jadi komentar di bawah ini mungkin atau mungkin tidak berlaku untuk revisi saat ini. Tinjau riwayat edit untuk detailnya. Terima kasih.
(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi
memberiAsia/Calcutta
itu seharusnyaAsia/Kolkata
. sepertinyaTzdbDateTimeZoneSource
berisi nilai-nilai lama.