Windows ve IANA saat dilimi tanımlayıcıları arasında dönüşüm için birincil veri kaynağı , Unicode CLDR projesinin bir windowsZones.xml
parçası olarak dağıtılan dosyadır . En son geliştirme sürümü burada bulunabilir .
Bununla birlikte , CLDR yılda yalnızca iki kez yayınlanmaktadır. Bu, Windows güncellemelerinin periyodik kadansı ve IANA saat dilimi veritabanının düzensiz güncellemeleri ile birlikte, CLDR verilerini doğrudan kullanmayı karmaşık hale getirir. Saat dilimi değişikliklerinin, dünyanın çeşitli hükümetlerinin isteğine göre yapıldığını ve tüm değişikliklerin, ilgili yürürlük tarihlerinden önce bu sürüm döngülerine dahil edilmek için yeterli bildirimle yapılmadığını unutmayın.
Tam olarak CLDR tarafından kapsanmayan ve zaman zaman yenileri ortaya çıkan, ele alınması gereken birkaç başka uç durum vardır. Bu nedenle, çözümün karmaşıklığını Nuget'ten kurulabilen TimeZoneConverter mikro kitaplığına sığdırdım.
Bu kitaplığı kullanmak basittir. İşte bazı dönüştürme örnekleri:
string tz = TZConvert.IanaToWindows("America/New_York");
string tz = TZConvert.WindowsToIana("Eastern Standard Time");
string tz = TZConvert.WindowsToIana("Eastern Standard Time", "CA");
Proje sitesinde daha fazla örnek var .
Bir IANA saat dilimi tek bir Windows saat dilimiyle eşleştirilebilirken bunun tersinin doğru olmadığını bilmek önemlidir. Tek bir Windows saat dilimi, birden fazla IANA saat dilimiyle eşlenebilir. Bu, Eastern Standard Time
hem America/New_York
ve hem de için eşlenen yukarıdaki örneklerde görülebilir America/Toronto
. TimeZoneConverter, "001"
özel olarak bir ülke kodu sağlamazsanız ve o ülkedeki farklı bir bölge için bir eşleşme olmadıkça, CLDR'nin işaretlediği "altın bölge" olarak bilinen alanı teslim edecektir .
Not: Bu cevap yıllar içinde gelişti, bu nedenle aşağıdaki yorumlar mevcut revizyon için geçerli olabilir veya olmayabilir. Ayrıntılar için düzenleme geçmişini inceleyin. Teşekkürler.
(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi
,Asia/Calcutta
olması gerektiğini verirAsia/Kolkata
.TzdbDateTimeZoneSource
eski değerleri içeriyor gibi görünüyor .