Я недавно обновил свой os с помощью .net 4.5 framework и скомпилировал все мои приложения, используя его. , к сожалению, некоторые из автоматических тестов, которые я написал, теперь терпят неудачу в конструкциях Assert, касающихся типов DateTime.Ошибка TimeZoneInfo в .net 4.5
После глубокого анализа я оказался этот:
в .net 4.0
DateTime dateUsing40 = new DateTime(2011, 4, 7); // ticks 634377312000000000
dateUsing40.ToUniversalTime(); //ticks **634377240000000000
bool isDaylightST = dateUsing40.IsDaylightSavingTime(); // returns **true
в .net 4.5
DateTime dateUsing45 = new DateTime(2011, 4, 7); // ticks 634377312000000000
dateUsing45.ToUniversalTime(); //ticks **634377276000000000
bool isDaylightST = dateUsing45.IsDaylightSavingTime(); // returns **false
System.Threading.Thread.CurrentThread.CurrentCulture является в обоих случаях {it-IT}
Фактически, дата, которую я использую, находится в диапазоне (итальянский, но также и для всех стран, которые используют WET), поэтому похоже, что в структуре существует (огромная) ошибка. однако я не нашел ничего полезного.
Я проверил в обеих машинах:
- региональные настройки по-прежнему установлен на итальянском языке.
- «Автоматическая настройка часов для перехода на летнее время».
- открытие Региональные и настройки-> на вкладке Расположение -> текущее местоположение по-прежнему Италия.
- ОС Windows 7 x64
РЕШИТЬ:
обновление базы изменилось значение в DynamicDaylightTimeDisabled к 1. Для того, чтобы решить эту проблему, это необходимо, чтобы превратить его в 0 и перезагрузки. Другой способ сделать это - использовать форму часового интерфейса.
Используйте ['NodaTime'] (http://nodatime.org/). Класс .NET 'DateTime' имеет некоторые проблемы. –
Здесь не воспроизводится. Вы уверены в 'CurrentCulture'. Были ли изменены региональные настройки Windows на компьютере .NET 4.5? –
Я тоже не могу воспроизвести это. И использование моей собственной культуры (nl-BE), и it-IT. – Jensen