TimeZoneConverterは、IANA、Windows、およびRailsタイムゾーンの名前をすばやく変換する軽量ライブラリです。
注:POSIXタイムゾーンサポートが必要な場合は、個別のTimeZoneConverter.Posix
パッケージも利用できます。
TimeZoneConverter
Nugetパッケージをプロジェクトに追加します。TimeZoneConverter
Namespaceをインポートします。 バージョン6.0.0の時点で、TimeZoneConverterは次のすべてで動作します。
.NETフレームワーク4.6.2未満のバージョンはサポートされなくなりました。
.NET 6には、IANAおよびWindowsタイムゾーンの組み込みサポートがクロスプラットフォームで、このライブラリの必要性がいくらか減少しています。 .NETのICU統合に依存して、この機能を実行します。詳細については、.NETブログを参照してください。
修正されている場合、.NET 6(またはそれ以上)のみをターゲットにしていて、プラットフォームが提供するか、App-Local ICUを有効にしている場合は、このライブラリを使用する必要がない場合があります。ただし、実際にはまだサポートされており、多くの人が特定の環境または特定のプラットフォームで引き続き役に立つことがわかりました。
TimeZoneConverterには、実行時に外部データ依存関係がありません。必要なデータはすべて、ライブラリ自体に組み込まれています。
TZConvert.GetTimeZoneInfo
など、TimeZoneConverterのいくつかの機能は、オペレーティングシステムのタイムゾーンデータにアクセスできる基礎となるTimeZoneInfo
オブジェクトに依存しています。 Windowsでは、このデータはレジストリから来ており、Windowsの更新を介して維持されます。
OSXとLinuxでは、このデータは、通常はtzdata
パッケージを介してIANAタイムゾーンデータベースの分布から得られます。環境にtzdata
パッケージがインストールされていない場合は、 TZConvert.GetTimeZoneInfo
正しく機能するようにインストールする必要があります。
たとえば、.NET CoreのAlpine Linux Docker画像は、 tzdata
で発送されなくなりました。 dotnet/dotnet-docker#1366を参照してください。Docker画像に追加する方法については。
このライブラリは、データソースの組み合わせを使用して目標を達成します。
ActiveSupport::TimeZone
のMAPPING
データ。通常、後者はエッジケース、およびまだ公式の情報源に公開されている、または公開されていない可能性のある新たに導入されたゾーン用に予約されています。
重要:このデータは、これらのソースのいずれかから新しいタイムゾーンが導入されるたびに変更される可能性があるため、常に最新の改訂を使用し、定期的に更新を確認することをお勧めします。
さらに、このライブラリは、提供されたタイムゾーンIDが実際にコードが実行されているコンピューターに存在するかどうかを判断しようとはしません。タイムゾーンの更新により、コンピューターが最新の状態に保たれていると想定されています。
たとえば、 Africa/Khartoum
WindowsタイムゾーンIDに変換しようとすると、 Sudan Standard Time
が得られます。まだKB4051956
がインストールされていないWindowsコンピューターで使用されている場合(このタイムゾーンが作成された)、 TimeZoneNotFoundException
を取得する可能性があります。
ゾーンがマップできない可能性があります。つまり、あるタイプのタイムゾーンから別のタイプのタイムゾーンへの論理的な等価物はありません。
現在、WindowsにマップできないIANAゾーンは1つだけです。これはAntarctica/Troll
です。言い換えれば、南極のトロールステーションに駐留する可能性のあるWindowsユーザーには、「正しい」タイムゾーンはありません。したがって、 Antarctica/Troll
窓に変換しようとすると、 TimeZoneNotFoundException
が得られます。
レールにはマップできないゾーンがたくさんあります。完全なリストは、ここのユニットテストコードにあります。
IANAタイムゾーン名を最適なWindowsタイムゾーンIDに変換します。
string tz = TZConvert . IanaToWindows ( " America/New_York " ) ;
// Result: "Eastern Standard Time"
Windowsタイムゾーン名を最適なIANAタイムゾーン名に変換します。
string tz = TZConvert . WindowsToIana ( " Eastern Standard Time " ) ;
// result: "America/New_York"
特定の国に関して、Windowsタイムゾーン名を最適なIANAタイムゾーン名に変換します。
string tz = TZConvert . WindowsToIana ( " Eastern Standard Time " , " CA " ) ;
// result: "America/Toronto"
実行しているOSに関係なく、.NET CoreからTimeZoneInfo
オブジェクトを取得します。
// Either of these will work on any platform:
TimeZoneInfo tzi = TZConvert . GetTimeZoneInfo ( " Eastern Standard Time " ) ;
TimeZoneInfo tzi = TZConvert . GetTimeZoneInfo ( " America/New_York " ) ;
Railsタイムゾーン名を最適なIANAタイムゾーン名に変換します。
string tz = TZConvert . RailsToIana ( " Mexico City " ) ;
// result: "America/Mexico_City"
Railsタイムゾーン名を最適なWindowsタイムゾーンIDに変換します。
string tz = TZConvert . RailsToWindows ( " Mexico City " ) ;
// result: "Central Standard Time (Mexico)"
IANAタイムゾーン名を1つ以上のレールタイムゾーン名に変換します。
IList < string > tz = TZConvert . IanaToRails ( " America/Mexico_City " ) ;
// Result: { "Guadalajara", "Mexico City" }
WindowsタイムゾーンIDを1つ以上のRailsタイムゾーン名に変換します。
IList < string > tz = TZConvert . WindowsToRails ( " Central Standard Time (Mexico) " ) ;
// Result: { "Guadalajara", "Mexico City" }
便利だと思うかもしれない追加のヘルパーがいくつかあります。
これらのプロパティは、このライブラリに知られているさまざまなタイプのタイムゾーンのリストを提供します。
TZConvert.KnownIanaTimeZoneNames
TZConvert.KnownWindowsTimeZoneIds
TZConvert.KnownRailsTimeZoneNames
特定の地域で適用されるタイムゾーンのリストが必要な場合は、以下を使用できます。
TZConvert.GetIanaTimeZoneNamesByTerritory()
このライブラリは、MITライセンスの条件の下で無料で提供されます。