Все наши данные даты / времени в нашей базе данных хранятся в формате UTC. Я пытаюсь написать функцию для преобразования этого времени UTC в предпочтительный часовой пояс пользователя (они могут выбрать свой часовой пояс в своем профиле, поэтому он НИЧЕГО не имеет ничего общего с локальными настройками на своем компьютере и всем, что связано с выбранным часовым поясом. из выпадающего списка доступных вариантов.
Эта функция находится в контексте события DevExpress AspxGridView (сторонний элемент управления не имеет отношения к вопросу, но я подумал, что упомяну это):
DateTimeOffset utcTime = (DateTimeOffset)e.Value;
TimeZoneInfo destTimeZone = Helper.GetTimeZoneInfo();
DateTime modifiedDate = TimeZoneInfo
.ConvertTimeFromUtc(utcTime.DateTime, destTimeZone);
e.DisplayText = String.Format("{0} {1}",
modifiedDate.ToString("g"),
destTimeZone.Abbreviation());
Helper.GetTimeZoneInfo()
просто возвращает класс TimeZoneInfo, соответствующий классу, выбранному пользователем, или по умолчанию «Тихоокеанское стандартное время», если он не выбрал один.
Обычно это работает нормально, пока я не переключу системные часы (на которых работает этот сервер) с сегодняшнего дня (14 октября, дата перехода на летнее время) на что-то вроде 11 января, что не летнее время.
Время, кажется, всегда отображается в летнее время (то есть всегда смещение на 7 часов). Независимо от того, что я делаю со своими системными часами, я не могу настроить время на дополнительный час.
Например, когда для моего часового пояса установлено тихоокеанское стандартное время, для времени UTC 10-10-2011 20:00:00 это всегда , отображающее это время:
10-10-2011 13:00:00 (время перехода на летнее время, смещение -7).
В нерабочее время (стандартное) время должно быть:
10-10-2011 12:00:00 (смещение -8).
Чего мне не хватает?