【Azure】.ToUniversalTime の罠に見事にはまった話
Azure上における時間は基本的に協定世界時間 (UTC) です。
こんな記事を書いておきながら、未だに慣れない場面も。きっと開発環境がJISだから悪いんだろうけど・・・。
shin21.hatenablog.com
ToUniversalTime で UTCに変換
.NET FrameworkにはUTCに変換する .ToUniversalTime() メソッドがあるので、それを用いる。
開発環境で動かした結果。うんうん問題なし。
Azureで動かした結果。全く時間が変わっていませんね。
確かに。
UTCをUTCに変換しようとしても、そりゃあ同じ値だよな・・・。
Azure上のローカルはUTC何だから、以下略。
きっと、疲れていたんだな、うん。
DateAddで +9でもいいんだけど
なんとなく気持ち悪い。しっくりこない。
.NET Framework 3.5以降は TimeZoneInfo.ConvertTimeToUtc
困ったときは DOBON.NET様 ですね。
ローカル時刻を世界協定時刻(UTC)に変換する: .NET Tips: C#, VB.NET
.NET Framework 3.5以降では、ローカル時刻をUTCに変換するのにTimeZoneInfo.ConvertTimeToUtcメソッドを、UTCをローカル時刻に変換するのにTimeZoneInfo.ConvertTimeFromUtcメソッドを使用します。
なるほど、このメソッドを使えば、変換前のタイムゾーンを無理矢理指定できるわけですね。
早速、試してみたソースがコチラ。
System.TimeZoneInfo.ConvertTimeToUtc(new DateTime(2017, 1, 20), System.TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time"))