Рассчитать годы, месяцы, дни между двумя датами
Я пытаюсь отобразить годы, месяцы и дни между двумя датами в приложении C#, которое я создаю. (Использование консоли для тестирования)
Я использую NodaTime для достижения этой цели, но у меня проблемы с округлением месяцев.
Я прочитал большинство вопросов и ответов здесь, но не нашел ничего, что могло бы мне помочь.
Большую часть времени функция работает, но иногда она не добавляет месяцы, если дни> 30 (что добавило бы месяц)
Я использую этот код для тестирования
LocalDate start = new LocalDate(2017, 10, 16);
LocalDate end = new LocalDate(2018, 1, 15);
Period period = Period.Between(start, end);
Console.WriteLine("{0} years, {1} months, {2} days",
period.Years, period.Months, period.Days);
Console.ReadLine();
(2017, 10, 16) и (2018, 1, 15) должны отображаться как 3 месяца, но они отображаются как 2 месяца и 30 дней (я пытался добавить +1 к period.Days, но это отображается как 31 день после того, как я сделай это). Мне нужно указать дату окончания при отображении формата.
Есть ли что-нибудь, что я могу использовать для достижения того, что мне нужно? Мне нужно показать правильный формат: 2 года, 11 месяцев, 3 дня
1 ответ
Проблема действительно в том, что вы используете "включить дату окончания в расчет" на timeanddate.com. Решение состоит не в том, чтобы добавить день к периоду в Noda Time, а в том, чтобы добавить день к конечной дате перед выполнением расчета:
Period period = Period.Between(start, end.PlusDays(1));
Это даст вам ожидаемый результат:
using System;
using NodaTime;
class Test
{
static void Main()
{
LocalDate start = new LocalDate(2017, 10, 16);
LocalDate end = new LocalDate(2018, 1, 15);
Period period = Period.Between(start, end.PlusDays(1));
Console.WriteLine(
$"{period.Years} years, {period.Months} months, {period.Days} days");
}
}
Выход:
0 years, 3 months, 0 days
Размышляя о подобных вопросах, я хотел бы попытаться найти действительно простые примеры.
Какой период между 23 января 2018 года и 24 января 2018 года? Время Нода и я оба говорим "1 день". (Добавьте 1 день к 23 января, и вы получите 24 января.) Если вы говорите о периоде времени, охватываемом интервалом с 23 января 2018 года по 24 января 2018 года, то это два дня.