C# TimeZoneInfo.ConvertTimeToUtc() не работает в течение времени перед переходомC#

Место общения программистов C#
Ответить
Anonymous
 C# TimeZoneInfo.ConvertTimeToUtc() не работает в течение времени перед переходом

Сообщение Anonymous »

Похоже, что C# .NET 8 неправильно преобразует местное время в формат UTC для времени с 12:00 до 2:00 в дни перехода на летнее время. Например

Код: Выделить всё

    var fallBack = new DateOnly(2026, 10, 25);
var tzi = TimeZoneInfo.FindSystemTimeZoneById("Europe/London");
var oneAm = fallBack.ToDateTime(new TimeOnly(1, 0));
var utc = TimeZoneInfo.ConvertTimeToUtc(oneAm, tzi);

// wrong because transition occurs at 2am
Debug.Assert(!tzi.IsDaylightSavingTime(oneAm));

// wrong because utc should be midnight
Debug.Assert(utc.Hour != 0);
Это сбивает с толку, потому что TimeZoneInfo.ConvertTimeToUtc() выдает исключение для невозможного местного времени (в течение весеннего периода), создавая ложное впечатление о правильной обработке переходного дня.
У меня есть обходной путь, но я хочу, чтобы это было здесь, чтобы другие могли найти альтернативные решения.
EDIT: Этот вопрос основан на ошибочном понимании, но, вероятно, будет полезен другим (и мне в будущее). Смотрите мой ответ ниже.

Подробнее здесь: https://stackoverflow.com/questions/798 ... tion-times
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»