Неправильная дата перехода на летнее время при использовании TimeZoneInfo.ConvertTime?

6 ноября 2011 г. в 2 часа ночи (EST, например, в Нью-Йорке) было 3 часа ночи согласно летнее время.

Кто-нибудь знает, почему функция TimeZoneInfo.ConvertTime из .NET framework возвращает следующее:

var tzi = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
var f = "yyyy/MM/dd HH:mm:ss";
TimeZoneInfo.ConvertTime(new DateTimeOffset(2012, 11, 3, 11, 0, 0, TimeSpan.Zero), tzi).ToString(f);
"2012/11/03 07:00:00"
TimeZoneInfo.ConvertTime(new DateTimeOffset(2012, 11, 4, 11, 0, 0, TimeSpan.Zero), tzi).ToString(f);
"2012/11/04 06:00:00"
TimeZoneInfo.ConvertTime(new DateTimeOffset(2012, 11, 6, 11, 0, 0, TimeSpan.Zero), tzi).ToString(f);
"2012/11/06 06:00:00"
TimeZoneInfo.ConvertTime(new DateTimeOffset(2012, 11, 7, 11, 0, 0, TimeSpan.Zero), tzi).ToString(f);
"2012/11/07 06:00:00"

Кажется, что изменение времени произошло 4 ноября, что не имеет смысла, поскольку оно произошло 6-го.

Редактировать: вау, это на мне. Я использовал 2012 год вместо 2011 года в своем коде.


person Erwin Mayer    schedule 04.09.2012    source источник
comment
Ваш код был бы намного легче читать, если бы нам не приходилось прокручивать его, чтобы добраться до него... (И наличие переменной с именем zone вместо вызова FindSystemTimeZoneById в каждом вызове также помогло бы ...)   -  person Jon Skeet    schedule 04.09.2012


Ответы (1)


Посмотрите на ваше описание:

6 ноября 2011 г.

Теперь посмотрите на свой код:

new DateTimeOffset(2012, 11, 3, 11, 0, 0, TimeSpan.Zero)

Думаю, мы нашли проблему.

Глядя на график перехода на летнее время на 2012 год, видно, что изменение происходит 4 ноября 2012 года, как говорит .NET.

Конечно, я все равно утверждаю, что код будет понятнее в Noda Time, но я предвзят. :)

person Jon Skeet    schedule 04.09.2012
comment
Ух ты. Я думаю, ошибка была в моей голове. Мне нужно найти какой-нибудь Байгон. Или Нода. - person Erwin Mayer; 04.09.2012
comment
@ErwinMayer: решать вам. Я не собираюсь возражать в любом случае. - person Jon Skeet; 04.09.2012
comment
Я отправил запрос на его удаление, так как сам пока не могу этого сделать. Я не возражаю, если он останется (хотя это может сбить с толку некоторых людей, ищущих аналогичную проблему), поэтому, если модератор предпочитает оставить его, это нормально. - person Erwin Mayer; 04.09.2012
comment
@JonSkeet Я задаю связанный вопрос, не могли бы вы его проверить: stackoverflow.com/questions/12506631/ - person Saeid; 20.09.2012