.NET Получить смещение временной зоны по имени часового пояса

В базе данных я сохраняю все дату/время в UTC.

Я знаю имя часового пояса пользователя (например, "Восточное стандартное время США" ).

Чтобы отобразить правильное время, я думал, что мне нужно добавить смещение часового пояса пользователя к дате/времени UTC. Но как мне получить смещение временной зоны по имени часового пояса?

Спасибо!

Ответ 1

Вы можете использовать TimeZoneInfo.FindSystemTimeZoneById, чтобы получить объект TimeZoneInfo, используя предоставленный идентификатор, а затем TimeZoneInfo.GetUtcOffset:

TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time");
TimeSpan offset = tzi.GetUtcOffset( myDateTime);

Ответ 2

Вы можете использовать TimeZoneInfo класс GetSystemTimeZones(), чтобы получить список всех часовых поясов, настроенных на вашем сервере, и сопоставить их с тем, который был у вашего клиента.

Хотя у вас есть временные интервалы в формате "Восточное стандартное время США"? Откуда это взялось?

Ответ 3

Вместо того, чтобы выполнять ручное добавление, вы должны использовать метод ConvertTime TimeZoneInfo, который будет обрабатывать преобразование вашей даты на основе указанного вами часового пояса.

var localizedDateTime = TimeZoneInfo.ConvertTime(yourDateTime, localTimeZoneInfo);