У меня есть вопрос о DateTimeOffset и летнем времени. Чтобы объяснить мой вопрос, давайте предположим, что сейчас дата и время:
11/6/2010 10:15:00 AM
Если я запускаю этот код:
DateTimeOffset myTime = DateTimeOffset.Now;
Console.WriteLine("Local time: " + myTime.ToLocalTime().DateTime);
Тогда я получаю такой результат:
Местное время: 06.11.2010 10:15:00
Это означает, что событие произошло в 10:15 утра (мой часовой пояс - горное летнее время (смещение -6)).
Итак, затем я сохраняю этот DateTimeOffset в моей базе данных SQL Server 2008 (как DateTimeOffset). На следующий день я хочу показать это пользователю. Но теперь летнее время истекло.
Если я запусту вышеупомянутую WriteLine с сохраненным значением off (из предыдущего дня), что будет отображаться?
Смещение, хранящееся в базе данных, равно -6. Но теперь, когда летнее время закончилось, текущее смещение составляет -7. Итак, насколько я понимаю документацию , сначала она преобразует мое время в время UTC (поэтому требуется 10:15 утра и добавляется 6 часов (16:15). Затем будет вычтено текущее смещение местное время (4:15 вечера - 7 = 9:15 утра).
Так что, если я правильно понимаю свою математику, теперь, когда я покажу свое событие, оно покажет, что оно произошло в 9:15, а не в 10:15.
Это не хорошо. Я хочу хранить информацию о часовом поясе, но мне нужно, чтобы мое время оставалось неизменным в том же часовом поясе. (Это означает, что если событие произошло в 10:15 утра в штате Юта, то в следующий раз, когда я посмотрю на него (в штате Юта), мне нужно убедиться, что это произошло в 10:15, независимо от того, произошло ли изменение летнего времени. .
Не могу думать, что я первый, кто столкнулся с этой проблемой. Что другие делают, чтобы это исправить? (Или у меня неверные факты?)