Я пытаюсь использовать 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.
Как я могу получить правильное время с надлежащим значением смещения?
Вам нужно получить 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)));