Почему новый DateTimeOffset(DateTime.Today).AddDays(4).Offset и новый DateTimeOffset(DateTime.Today.AddDays(4)). Смещение возвращают разные значения?

Я в настоящее время в зоне UTC+1. TimeZoneInfo.Local.BaseUtcOffset возвращает +1.

А также new DateTimeOffset(DateTime.Today).AddDays(4).Offset возвращает +1.

Но new DateTimeOffset(DateTime.Today.AddDays(4)).Offset возвращает +2!

Еще интереснее то, что до плюс четыре дня смещение одинаковое. Начиная с четырехдневного звонка new DateTimeOffset(DateTime.Today.AddDays(x)).Offset возвращает +2 смещение. Зачем?

//Same offset +1
var offset2 = new DateTimeOffset(DateTime.Today).AddDays(7).Offset;
var offset22 = new DateTimeOffset(DateTime.Today.AddDays(7)).Offset;

//Same offset +1
var offset3 = new DateTimeOffset(DateTime.Today).AddDays(3).Offset;
var offset32 = new DateTimeOffset(DateTime.Today.AddDays(3)).Offset;

//Different offset +1 and +2
var offset4 = new DateTimeOffset(DateTime.Today).AddDays(4).Offset;
var offset42 = new DateTimeOffset(DateTime.Today.AddDays(4)).Offset;

//Different offset +1 and +2
var offset5 = new DateTimeOffset(DateTime.Today).AddDays(5).Offset;
var offset52 = new DateTimeOffset(DateTime.Today.AddDays(5)).Offset;

1 ответ

Решение

Более серьезный ответ, чем мой комментарий...

Из MSDN:

Поскольку объект DateTimeOffset не представляет дату и время в конкретном часовом поясе, метод AddDays не учитывает правила настройки конкретного часового пояса, когда он выполняет арифметику даты и времени.

Следовательно

DateTimeOffset(DateTime.Today).AddDays(5)

не меняет часовой пояс для исходной даты (сегодня = CET = UTC+1)

Также

DateTime.Today.AddDays(5)

дает местное время в 5 дней (CEST = UTC+2).

Так

DateTimeOffset(DateTime.Today.AddDays(5))

даст время со смещением CEST (UTC+2)

Другие вопросы по тегам