Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 计算两个日期之间的年、月、日_C#_Date_Nodatime - Fatal编程技术网

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

C# 计算两个日期之间的年、月、日,c#,date,nodatime,C#,Date,Nodatime,我试图在我正在创建的C#应用程序中显示两个日期之间的年、月和日。(使用控制台进行测试) 我使用NodaTime来实现这一点,但几个月后我遇到了一些问题 我已经阅读了这里的大部分问题和答案,但没有发现任何我可以从中受益的东西 大多数情况下,该函数都可以工作,但有时如果天>30,则不会添加月份(这会添加一个月) 我正在使用此代码进行测试 LocalDate start = new LocalDate(2017, 10, 16); LocalDate end = new LocalDate(2018,

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

问题在于您确实在使用timeanddate.com中的“计算中包含结束日期”。解决方案不是在野田佳彦时间段中添加一天,而是在执行计算之前在结束日期添加一天:

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日之间的时间是多少?野田佳彦和我都说“一天”。(1月23日加1天,即1月24日。)如果你说的是2018年1月23日至2018年1月24日的时间间隔,那么这是两天。

它在你的链接中显示,或者包括结束日期在内的3个月。也许nodatime不包括最后一天,但计算了该日期之前的时间跨度。如果是这样的话,我想你可以在
末尾加上一天
?月份并不总是。。。所以16日到15日实际上是少于一个月的一天。(
如果天>30(这会增加一个月)
没有意义,月不是一个固定的30天)的可能重复和/或您需要将一个月固定为30天,一年固定为365天来做您想要做的事情。在这之后,计算两个日期之间的总天数。@Felipedevza想到了这一点,但我想显示正确的格式,如果可能的话,我需要在月份(30-31)中包含闰年和日期变化