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

时间:2018-01-23 12:40:12

标签: c# date nodatime

我正在尝试在我正在创建的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天

1 个答案:

答案 0 :(得分:2)

问题确实是你在计算中使用"包括结束日期"在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

在考虑"之间"像这样的问题,我想尝试考虑一些非常简单的例子。

2018年1月23日到2018年1月24日期间的期间是什么时候? Noda Time和我都说" 1天"。 (在1月23日添加1天,到1月24日。)如果您在2018年1月23日到2018年1月24日的日期间隔内谈论涵盖的时间段,那么&# 39天;两天。