Собственно, преобразование верно.
Хотя это правда, что Беларусь в настоящее время имеет часовой пояс для UTC + 3 в течение всего года, это только в том, что путь с 2012 года
До этого его стандартное смещение было UTC + 2 , и он наблюдал дневное время (ака «летнее время»), компенсирующее UTC + 3 с последнего воскресенья марта до последнего воскресенья октября. Это изменение было принято, оставаясь в летнее время в 2011 году и оставаясь там навсегда, а не отступать.
You can see the history of changes here.
При использовании "Belarus Standard Time"
часового пояса, информация для этой зоны извлекается из данных в реестре по следующему адресу:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Belarus Standard Time
Там вы увидите основную информацию, а также подраздел называется Dynamic DST
, который содержит изменения за год. Вы заметите, что Windows, имеет три записи для этой зоны:
- One за 2010 год и до, которые чередуются между стандартным и светлым временем суток
- Один за 2011 год, что делает одно изменение времени дневного света без возврата стандартное время
- Один за 2012 год и больше, что фиксируется в зимнее время с новой базой смещения
Заметим, что это упрощение full IANA TZDB entry of "Europe/Minsk"
, который отслеживает другие изменения в 1992 году и ранее. Windows не знает об этих изменениях, поэтому, если вы собираетесь работать с историческими датами в этом часовом поясе, вам следует использовать Noda Time вместо TimeZoneInfo
, так как Noda Time поддерживает часовые пояса TZDB. Кроме того, обратите внимание, что поскольку данные моделируются в Windows в 2011 году и ранее имеют другое базовое смещение, чем правило 2012 года и переадресация, на него влияет проблема, описанная в KB2012229. Раздел статуса этой статьи устарел, поскольку проблема была решена с помощью .NET 4.6. Даже если вы нацеливаете .NET 3.5 на .NET 4.5.2, если .NET 4.6 установлен на машине вообще, тогда он будет вести себя корректно. Если .NET 4.6 не установлен на машине, он применит неверное базовое смещение для Беларуси в 2011, 2010 и предыдущие годы.(Вот почему SonerGönül получил время 15:00
, упомянутое в комментариях к вопросу.)
Вы действительно уверены? Это кажется странным. Он возвращает '{01.01.2000 15:00:00}' на меня. –
@ SonerGönül, да, я уверен. Похоже, что после установки новой версии VS есть DLL с ошибкой. – Neshta
Какова ваша среда? .Net Framework версии и версии Windows? –