Есть ли в C # функция, которая возвращает 7 как количество дней, которые составляют неделю? - PullRequest
0 голосов
/ 09 мая 2018

Если я выберу среду 2 мая 2017 года в качестве даты начала и вторник 8 мая в качестве даты окончания и передам их в качестве параметров в следующий код;

TimeSpan duration =  startDate - endDate;
return Convert.ToDouble(duration.TotalDays);

Я получил 6 вернувшихся. Я понимаю причину, почему, но инстинктивно можно (или, по крайней мере, я) смотреть на этот период как на неделю (или 7 дней). Есть ли в C # легкодоступная функция, которая будет возвращать 7 как количество дней, которое представляет этот диапазон дат?

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Проблема в том, что DateTime не представляет даты, а представляет моменты времени, которые включают даты. Когда вы пишете «2 мая 2018 года», DateTime представляет его как «Полночь 2 мая 2018 года». Когда вы вычитаете endDate из startDate, вы вычисляете количество времени, прошедшего между полуночью 2 мая и 8 мая, которое составляет ровно 6.

Поскольку вы хотите включить оба конца в свои вычисления, вам нужно добавить 1 день к результату:

var from = new DateTime(2018, 5, 2);
var to = new DateTime(2018, 5, 8);
var diff = to.Date - from.Date + TimeSpan.FromDays(1);
Console.WriteLine(diff.TotalDays); // Prints 7
0 голосов
/ 09 мая 2018

получить 6 вернулся. Я понимаю причину, почему, но инстинктивно можно (или, по крайней мере, я) смотреть на этот период как на неделю (или 7 дней).

В нем говорится 6 дней, потому что составляет 6 дней.

Если указать начальную дату как «5/2/2018 00:00:00», а конечную дату - «5/8/2018 23:59:59», ответ будет 6,23: 59: 59 дней.

Если вы используете 5/2 и 5/3, возвращается 1, что правильно. Это ничем не отличается от того, что происходит с вашими тестовыми данными.

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