Я делал это раньше, сохраняя идентификатор часового пояса в базе данных, используя таблицу сопоставления. то есть таблица, содержащая результаты TimeZone.GetSystemTimeZones()
На самом деле вам не нужно использовать TimeZoneInfo.FindSystemTimeZoneById()
, хотя: вы можете выполнить преобразование, используя одну из перегрузок TimeZoneInfo.ConvertTimeBySystemTimeZoneId()
. Этот метод имеет некоторые перегрузки, которые принимают значения DateTime, и некоторые, которые принимают значения DateTimeOffset (которые являются предпочтительными, так как они указывают однозначный момент времени).
например.
TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Now, "New Zealand Standard Time", "UTC")
Реальным преимуществом использования идентификатора системного часового пояса, а не смещения, хранящегося в базе данных, является то, что летнее время автоматически обрабатывается для вас TimeZoneInfo.ConvertTimeBySystemTimeZoneId
.