Pandora Pocket

IT系と日常系の備忘録。三日坊主。

Linuxで動かす.NET CoreアプリではTimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time")が使えない

もともとAzure Functionsで動かしていたアプリをLinux上に持って行った際、下記のようなエラーが発生しました。

エラーが発生した箇所の実装は下記の通り。

結論としては、Windowsでは日本のタイムゾーンとして「Tokyo Standard Time」が定義されているものの、Linux(少なくともUbuntu 18.04では)では下記の項目しか存在しないことにより、未定義エラーが出ていたようです。

そりゃ存在しない以上エラーも吐きます。

「Japan」と記載しておけばいいのでしょうが、それだとWindows環境では動かなくなってしまいます。

解決策を探したところ、MSのブログを発見。

こちらではTimeZoneConverterというライブラリを用いる方法を紹介しています。
内部的にWindowsタイムゾーンLinuxタイムゾーンマッピングさせているようです。

さっそくNuGetで参照し、下記のように実装を修正。

この修正でエラーが発生しなくなりました。