TimeZoneConverter adalah perpustakaan yang ringan untuk dikonversi dengan cepat antara nama zona IANA, Windows, dan Rails Time Zone.
Catatan: Paket TimeZoneConverter.Posix terpisah juga tersedia jika Anda memerlukan dukungan zona waktu POSIX.
TimeZoneConverter Nuget ke proyek Anda.TimeZoneConverter di mana diperlukan. Pada versi 6.0.0, TimeZoneConverter bekerja dengan semua hal berikut:
Versi .NET Framework Kurang dari 4.6.2 tidak lagi didukung.
.NET 6 memiliki dukungan bawaan untuk zona waktu IANA dan Windows dengan cara lintas platform, agak mengurangi kebutuhan akan perpustakaan ini. Ini bergantung pada integrasi ICU .NET untuk melakukan fungsionalitas ini. Lihat blog .net untuk detailnya.
Dinyatakan kembali, jika Anda hanya menargetkan .NET 6 (atau lebih tinggi), dan Anda telah diaktifkan ICU yang disediakan platform atau APP-lokal, Anda mungkin tidak perlu menggunakan pustaka ini. Namun, memang masih didukung, dan banyak yang menemukan itu terus berguna di lingkungan tertentu atau di platform tertentu.
TimeZoneConverter tidak memiliki dependensi data eksternal saat runtime. Semua data yang dibutuhkan tertanam di perpustakaan itu sendiri.
Beberapa fungsi di timeZoneConverter, seperti TZConvert.GetTimeZoneInfo mengandalkan objek TimeZoneInfo yang mendasari yang memiliki akses ke data zona waktu dari sistem operasi. Di Windows, data ini berasal dari registri dan dikelola melalui pembaruan Windows.
Pada OSX dan Linux, data ini berasal dari distribusi database zona waktu IANA, biasanya melalui paket tzdata . Jika lingkungan Anda tidak menginstal paket tzdata , Anda harus menginstalnya untuk TZConvert.GetTimeZoneInfo untuk bekerja dengan benar.
Misalnya, gambar Docker Alpine Linux untuk .NET Core tidak lagi dikirimkan dengan tzdata . Lihat Dotnet/Dotnet-Docker#1366 untuk instruksi tentang cara menambahkannya ke gambar Docker Anda.
Perpustakaan ini menggunakan kombinasi sumber data untuk mencapai tujuannya:
MAPPING dari ActiveSupport::TimeZone dalam kode sumber Rails.Biasanya, yang terakhir dicadangkan untuk kasus tepi, dan untuk zona yang baru diperkenalkan yang mungkin atau mungkin belum diterbitkan ke sumber resmi.
Penting: Karena data ini dapat berubah setiap kali zona waktu baru diperkenalkan dari salah satu sumber ini, disarankan agar Anda selalu menggunakan revisi terkini, dan periksa pembaruan secara teratur.
Selain itu, perpustakaan ini tidak mencoba untuk menentukan apakah ID zona waktu yang disediakan sebenarnya ada di komputer tempat kode berjalan. Diasumsikan bahwa komputer tetap terkini dengan pembaruan zona waktu.
Misalnya, jika seseorang mencoba untuk mengonversi Africa/Khartoum menjadi ID zona waktu Windows, mereka akan mendapatkan Sudan Standard Time . Jika kemudian digunakan pada komputer Windows yang belum menginstal KB4051956 (yang membuat zona waktu ini), mereka kemungkinan akan mendapatkan TimeZoneNotFoundException .
Adalah mungkin bagi zona untuk menjadi tidak dapat dikabarkan - artinya tidak ada setara logis dari satu jenis zona waktu ke yang lain.
Saat ini hanya ada satu zona IANA yang tidak dapat dibatalkan ke Windows, yaitu Antarctica/Troll . Dengan kata lain, tidak ada zona waktu "benar" untuk pengguna Windows yang mungkin ditempatkan di Stasiun Troll, Antartika. Oleh karena itu, jika Anda mencoba mengonversi Antarctica/Troll ke Windows, Anda akan mendapatkan TimeZoneNotFoundException .
Ada banyak zona yang tidak dapat dipicu oleh rel. Daftar lengkap ada dalam kode uji unit di sini.
Konversi nama zona waktu IANA ke ID zona waktu Windows yang pas.
string tz = TZConvert . IanaToWindows ( " America/New_York " ) ;
// Result: "Eastern Standard Time"Konversi nama zona waktu Windows ke nama zona waktu IANA terbaik yang pas.
string tz = TZConvert . WindowsToIana ( " Eastern Standard Time " ) ;
// result: "America/New_York"Konversi nama zona waktu Windows menjadi nama zona waktu IANA terbaik, sehubungan dengan negara tertentu.
string tz = TZConvert . WindowsToIana ( " Eastern Standard Time " , " CA " ) ;
// result: "America/Toronto" Dapatkan objek TimeZoneInfo dari .NET Core, terlepas dari apa yang Anda jalankan:
// Either of these will work on any platform:
TimeZoneInfo tzi = TZConvert . GetTimeZoneInfo ( " Eastern Standard Time " ) ;
TimeZoneInfo tzi = TZConvert . GetTimeZoneInfo ( " America/New_York " ) ;Konversi nama zona waktu rel menjadi nama zona waktu IANA terbaik.
string tz = TZConvert . RailsToIana ( " Mexico City " ) ;
// result: "America/Mexico_City"Konversi nama zona waktu rel ke ID zona waktu Windows yang pas.
string tz = TZConvert . RailsToWindows ( " Mexico City " ) ;
// result: "Central Standard Time (Mexico)"Konversi nama zona waktu IANA menjadi satu atau lebih nama zona waktu rel.
IList < string > tz = TZConvert . IanaToRails ( " America/Mexico_City " ) ;
// Result: { "Guadalajara", "Mexico City" }Konversi ID zona waktu Windows menjadi satu atau lebih nama zona waktu rel.
IList < string > tz = TZConvert . WindowsToRails ( " Central Standard Time (Mexico) " ) ;
// Result: { "Guadalajara", "Mexico City" } Ada beberapa pembantu tambahan yang mungkin Anda temukan berguna.
Properti ini menyediakan daftar berbagai jenis zona waktu yang diketahui oleh perpustakaan ini:
TZConvert.KnownIanaTimeZoneNamesTZConvert.KnownWindowsTimeZoneIdsTZConvert.KnownRailsTimeZoneNamesJika Anda memerlukan daftar zona waktu yang berlaku di wilayah tertentu, Anda dapat menggunakan:
TZConvert.GetIanaTimeZoneNamesByTerritory()Perpustakaan ini disediakan secara gratis, berdasarkan ketentuan lisensi MIT.