Рассчитать годы, месяцы, дни между двумя датами

Я пытаюсь отобразить годы, месяцы и дни между двумя датами в приложении 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 года, то это два дня.

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