DateTime
特定のタイムゾーンを使用してローカルから UTCに変換する方法があります。
TimeZoneInfo timeZone = FindSystemTimeZoneById(timeZoneId);
DateTime dateTimeInUtc = TimeZoneInfo.ConvertTimeToUtc(localDateTime, timeZone);
return dateTimeInUtc;
しかし、ときどき (いつ、なぜなのかはわかりませんが、ほとんどの場合正しく機能します)、この変換が期待どおりに機能しないことがあります。
例えば:
- タイムゾーンは
-5
- 現地時間は
08/28/2013 12:00:00 AM
(DateTimeKind
ですUnspecified
)
では、上記の値を含むこのコード行の後に何を期待しますか?
DateTime dateTimeInUtc = TimeZoneInfo.ConvertTimeToUtc(localDateTime, timeZone);
UTC 時刻が になると予想してい08/28/2013 5:00:00 AM
ます。しかし
08/28/2013 4:00:00 AM
. timezone が -5 の場合は正しくありません。
まったく同じコードが数か月間正しく機能しました。デバッガーの変換を見たときでさえ、正しかったです。
約 2 週間前にこのコードで同じ問題に直面しました (間違った変換)。しかし、翌日、コードを変更することなく問題は解消されました。