Наше правительство любит менять местное время или включить | отключить летнее время.
MS развернул патч для России, чтобы принять во внимание новое изменение времени.
Теперь возникает вопрос, существует ли история изменений?
Когда я получаю UTC время дня в 01.01.2000, система должна помнить, что в московском часовом поясе было +3 UTC. (летом +4) в этот момент.
В течение 01.01.2012 у нас было +4 UTC как зимой, так и летом. И скоро у нас будет +3 UTC.
простой тест показывает, что .NET не ведет записи об изменениях:
var t = new DateTime(2012,1,1);
// UTC +4 expected
System.Console.WriteLine(t.ToLocalTime());
// UTC +4 expected
t = new DateTime(2012,06,1);
System.Console.WriteLine(t.ToLocalTime());
// UTC +3 expected
t = new DateTime(2000,1,1);
System.Console.WriteLine(t.ToLocalTime());
// UTC +4 expected
t = new DateTime(2000,6,1);
System.Console.WriteLine(t.ToLocalTime());
Существует ли какой-либо дополнительный API для решения этой проблемы?
Update:
Найден класс TimeZoneInfo и соответствующий класс AdjustmentRule. Осталось проверить, влияет ли настройка часового пояса TimeZoneInfo.Local
на API DateTime.
Обновление 2:
Кажется, что смещения UTC не хранятся как история, а AdjustmentRule
изменяет только дневное время в течение года.