Pandora Pocket

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

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

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

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

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

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

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

Developing applications that span multiple operating systems in .NET Core while working with Time Zone information can lead to unexpected results for developers not familiar with the differences in how operating systems manage Time Zones. In this post, we will explore those differences and the challenges they present.
[はてなブックマークで表示]

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

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

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