计算两个日期之间的年、月、日

Calculate years, months, days between two dates

我试图在我创建的 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 months 但它们显示为 2 个月零 30 天(我尝试将 +1 添加到 period.Days,但在我这样做后它显示为 31 天)。我需要在显示格式时包含结束日期。

有什么我可以用来实现我需要的东西吗? 我需要显示正确的格式:2 年,11 个月,3 天

问题确实是您在 timeanddate.com 中使用了 "include end date in calculation"。解决方案不是在 Noda Time 的 period 上添加一天 - 它是在执行计算之前在 end date 上添加一天:

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

在思考 "between" 此类问题时,我喜欢尝试思考非常简单的示例。

2018 年 1 月 23 日和 2018 年 1 月 24 日之间的时间段是多少?野田时间和我都说“1天”。 (将 1 天添加到 1 月 23 日,您将得到 1 月 24 日。)如果您谈论的是 涵盖 的时间段,日期间隔为 2018 年 1 月 23 日至 2018 年 1 月 24 日,那就是两天.