1

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 週間前にこのコードで同じ問題に直面しました (間違った変換)。しかし、翌日、コードを変更することなく問題は解消されました。

4

1 に答える 1

4

-5 は基本 UTC オフセットですが、サマータイム中は 1 時間変化して -4 になります。

サマータイム (米国) 2013 年は午前 2:00 に始まりました

3月10日日曜日

午前 2:00 に終了

11月3日日曜日

この間、ほとんどの州は時計を 1 時間進めます (アリゾナ州を除く)。

于 2013-08-29T07:14:48.567 に答える