1. ホーム
  2. c#

[解決済み] TimeZoneInfoを使ってサマータイム中のローカルタイムを取得するには?

2023-05-05 02:43:51

質問

私は DateTimeOffset を使って、どの時間帯でも特定の瞬間を伝えようとしています。 私は、どのように TimeZoneInfo を使ってサマータイムに対処する方法がわかりません。

var dt = DateTime.UtcNow;
Console.WriteLine(dt.ToLocalTime());

var tz = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
var utcOffset = new DateTimeOffset(dt, TimeSpan.Zero);
Console.WriteLine(utcOffset.ToOffset(tz.BaseUtcOffset));

これは印刷されます。

2010年6月2日 16時37分19秒
2010年6月2日午後3時37分19秒 -06:00

私は中部時間帯に住んでいて、現在サマータイム中です。 2行目を読めるようにしようとしています。

2010年6月2日午後4時37分19秒 -05:00

BaseUtcOffset は、夏時間によって変化しないようです。

どうすれば適切なオフセット値で正しい時刻を取得できるのでしょうか?

どのように解決するのですか?

TimeZoneInfoからUtcOffsetを取得し、それをToOffset()メソッドに渡す必要があります。

var dt = DateTime.UtcNow;
Console.WriteLine(dt.ToLocalTime());

var tz = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
var utcOffset = new DateTimeOffset(dt, TimeSpan.Zero);
Console.WriteLine(utcOffset.ToOffset(tz.GetUtcOffset(utcOffset)));