Время перехода на летнее время для нескольких часовых поясов (Европа / Никосия) указывает неправильную дату с помощью System.Globalization C# - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь получить время перехода на летнее время для часового пояса «Антарктида / Макмердо» для текущего 2020 года, используя класс System.Globalization в C#. Я получаю их как

DST Entry Time: 9/29/2020 2:00:00 AM
DST Exit Time: 4/5/2020 2:59:59 AM

Но фактическое время перехода на летнее время должно быть 27.09.2020 2:00:00 AM согласно https://www.timeanddate.com/time/change/antarctica/mcmurdo

Полученное время входа уже в летнем времени, из-за чего моя тестовая программа не работает, так как сдвиг времени не происходит.

Ниже используется фрагмент кода

var currTimeZone = TimeZone.CurrentTimeZone;

var dstInfo = currTimeZone.GetDaylightChanges(now.Year);

DSTEntry = dstInfo.Start.ToString();

Ниже приведены версии Mono и Ubuntu, на которых я работаю

Ubuntu 16.04.3 LTS

Mono JIT-компилятор версии 5.4.0.201

Вот результат работы zdump

$ zdump Antarctica / McMurdo -v 2019,2022

Antarctica / McMurdo Сб, 6 апреля 13:59:59 2019 UT = Вс 7 апреля 02:59:59 2019 NZDT isdst = 1 gmtoff = 46800

Антарктида / Мак-Мердо Сб, 6 апреля 14:00:00 2019 UT = Вс, 7 апреля 02:00:00 2019 NZST isdst = 0 gmtoff = 43200

Антарктида / Мак-Мердо Сб 28 сентября 13:59 : 59 2019 UT = вс 29 сентября 01:59:59 2019 NZST isdst = 0 gmtoff = 43200

Antarctica / McMurdo сб 28 сентября 14:00:00 2019 UT = вс 29 сентября 03:00:00 2019 NZDT isdst = 1 gmt off = 46800

Antarctica / McMurdo сб, 4 апреля 13:59:59 2020 UT = вс, 5 апреля 02:59:59 2020 NZDT isdst = 1 gmtoff = 46800

Antarctica / McMurdo сб, апр. 4 14:00:00 2020 UT = вс 5 апреля 02:00:00 2020 NZST isdst = 0 gmtoff = 43200

Antarctica / McMurdo сб 26 сентября 13:59:59 2020 UT = вс 27 сентября 01: 59:59 2020 NZST isdst = 0 gmtoff = 43200

Antarctica / McMurdo Сб 26 сентября 14:00:00 2020 UT = Вс 27 сентября 03:00:00 2020 NZDT isdst = 1 gmtoff = 46800

Антарктида / Мак-Мердо Сб, 3 апреля 13:59:59 2021 UT = Вс, 4 апреля 02:59:59 2021 NZDT isdst = 1 gmtoff = 46800

Антарктида / Мак-Мердо Сб 3 апреля 14:00:00 2021 UT = вс, 4 апреля 02:00:00 2021 NZST isdst = 0 gmtoff = 43200

Antarctica / McMurdo Сб 25 сентября 13:59:59 2021 UT = вс 26 сентября 01:59:59 2021 NZST isdst = 0 gmtoff = 43200

Antarctica / McMurdo Сб 25 сентября 14:00:00 2021 UT = Вс 26 сентября 03:00:00 2021 NZDT isdst = 1 gmtoff = 46800

Кто-нибудь может помочь мне, как решить эту проблему времени? или это ошибка из DLL / timezone_database, из которой C# читает?

Спасибо

1 Ответ

0 голосов
/ 11 августа 2020

Из документация по классу TimeZone:

Предупреждение

Этот API устарел

. ..

ⓘ Важно

По возможности используйте класс TimeZoneInfo вместо класса TimeZone.

...

Класс TimeZone поддерживает только одно правило корректировки летнего времени для местного часового пояса. В результате класс TimeZone может точно сообщать информацию о переходе на летнее время или преобразовывать между UT C и местным временем только для периода, в котором действует последнее правило корректировки. Напротив, класс TimeZoneInfo поддерживает несколько правил настройки, что позволяет работать с историческими c данными часового пояса.

Короче, не используйте класс TimeZone .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...