Как использовать TimeZoneInfo для получения местного времени в течение Летнего времени?

Я пытаюсь использовать 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));

Это распечатывает:

6/2/2010 4:37:19 PM
6/2/2010 3:37:19 PM -06:00

Я нахожусь в зоне центрального поясного времени, и и мы находимся в настоящее время в летнее время. Я пытаюсь заставить вторую строку читать:

6/2/2010 4:37:19 PM -05:00

BaseUtcOffset по-видимому, не изменяется на основе DST.

Как я могу получить правильное время с надлежащим значением смещения?

78
задан Peter Duniho 22 November 2019 в 05:37
поделиться

1 ответ

Вам нужно получить UtcOffset из TimeZoneInfo, затем передать его методу 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)));
57
ответ дан 24 November 2019 в 10:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: