WindowsとIANAのタイムゾーン識別子間の変換用のデータの主なソースは、Unicode CLDRプロジェクトのwindowsZones.xml
一部として配布されるファイルです。最新の開発バージョンはこちらから入手できます。
ただし、CLDRは毎年2回だけリリースされます。これは、Windows更新の定期的な周期、およびIANAタイムゾーンデータベースの不定期な更新と相まって、CLDRデータを直接使用するだけでは複雑になります。タイムゾーンの変更自体は、世界のさまざまな政府の気まぐれで行われ、すべての変更がそれぞれの発効日の前にこれらのリリースサイクルに入るように十分に注意して行われるわけではないことに注意してください。
CLDRで厳密にカバーされていない、処理が必要なエッジケースが他にもいくつかあり、新しいケースが時々ポップアップします。そのため、ソリューションの複雑さを、NugetからインストールできるTimeZoneConverterマイクロライブラリにカプセル化しました。
このライブラリの使用は簡単です。次に変換の例をいくつか示します。
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"
プロジェクトサイトには他にも例があります。
IANAタイムゾーンは単一のWindowsタイムゾーンにマップできますが、その逆は当てはまらないことを認識することが重要です。1つのWindowsタイムゾーンが複数のIANAタイムゾーンにマップされる場合があります。これは、とのEastern Standard Time
両方America/New_York
にマッピングされている上記の例で確認できますAmerica/Toronto
。TimeZoneConverterは"001"
、特に国コードを提供し、その国の別のゾーンに一致するものがない限り、「ゴールデンゾーン」と呼ばれる、CLDRでマークされたものを配信します。
注:この回答は長年にわたって進化してきたため、以下のコメントは現在のリビジョンに適用される場合と適用されない場合があります。詳細については、編集履歴を確認してください。ありがとう。
(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi
、Asia/Calcutta
それが必要になりますAsia/Kolkata
。TzdbDateTimeZoneSource
古い値が含まれているようです。