Как использовать TimeZoneInfo Class с переходом на летнее время? - PullRequest
0 голосов
/ 01 апреля 2019

Я использую класс TimeZoneInfo для преобразования значения Datetime в UTC. Однако преобразование не учитывает переход на летнее время автоматически. Как мне этого добиться.

Например, я пытаюсь преобразовать следующий DateTime в UTC:

//meetingDate is "10/04/2019 12:00:00" PM

var timeZoneId="AUS Eastern Standard Time";

DateTime dtUTC = TimeZoneInfo.ConvertTime(meetingDate, TimeZoneInfo.FindSystemTimeZoneById(timeZoneId), TimeZoneInfo.Utc);

Возвращаемое значение: 04.10.2009 02:00 UTC (am)

И это потому, что часовой пояс в моей оперативной системе для "AUS Eastern Standard Time" - UTC + 10:00 (см. Изображение ниже) Но поскольку настройка «Автоматически переводить на летнее время» включена, я могу видеть правильное время на своих окнах 10 (что на самом деле в этот конкретный момент (1 апреля 2019 г.) UTC + 11)

Как я могу получить то же поведение, используя метод TimeZoneInfo.ConvertTime.

Что если я передам значение "10/04/2019 12:00:00 PM", я должен вернуться: 10/04/2019 01:00:00 UTC

P.S .: Я проверил следующий вопрос переполнения стека, но он конвертируется из UTC, поэтому он не относится к моему вопросу.

Как использовать TimeZoneInfo для получения местного времени в летнее время?

Изображение Windows 10 Часовой пояс:

Image Windows 10 Timezone

1 Ответ

1 голос
/ 01 апреля 2019

Код уже работает правильно и настраивается на летнее время. «Восточное стандартное время AUS» является Windows-эквивалентом зоны IANA Австралия / Сидней. Переходы для Австралии / Сиднея показаны на моем сайте Noda Time , и они указывают на то, что 6 апреля в 16:00 по Гринвичу (т.е. 7 апреля в 3:00 по местному времени) происходит переход с UTC + 11 на UTC + 10.

Это означает, что до 10 апреля - дата по местному времени, в которое вы просите преобразовать - смещение действительно UTC + 10, а 10/04/2019 02:00:00 UTC ( я) является правильным результатом. Если бы это дало результат 1:00 (таким образом вычитая смещение UTC +11), это было бы неправильно, потому что не будет приспосабливаться к переходу на летнее время 6 апреля.

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