【问题标题】:Difference between using `Period.Between` and substracting two local dates使用“Period.Between”和减去两个本地日期之间的区别
【发布时间】:2025-12-28 18:40:06
【问题描述】:

为什么periodBetween.Dayssubstracted.Days 的结果不同? 我可以看到 periodBetween.Months 是 0,substracted.Months 是 2,我可以看到这两个结果有何不同,但我不知道为什么:)。

using NodaTime;
void Main()
{
    var firstDate = new LocalDate(2020, 8, 1);
    var secondDate = new LocalDate(2020, 10, 30);
    
    var periodBetween = Period.Between(firstDate, secondDate, PeriodUnits.Days);
    var subtracted = secondDate - firstDate;
    Console.WriteLine(periodBetween.Days);
    Console.WriteLine(subtracted.Days);
}

【问题讨论】:

    标签: nodatime


    【解决方案1】:

    您的periodBetween 计算结果是“这两个日期之间的时间间隔是多少,仅使用 天?”

    您的subtracted 计算相当于调用Period.Between 而不指定任何单位,或者指定PeriodUnits.Days | PeriodUnits.Months | PeriodUnits.Years - 换句话说,“这两个日期之间的时间段是多少,使用天、月和年?”

    一个时间段具有独立年、月、日、小时、分钟等值 - 如果您使用年/月/日计算值不等同于仅使用天计算值。

    “90 天”期间与“2 个月零 29 天”期间不同。在 一些 计算中,他们会给出相同的答案,但并非总是如此。例如,如果您将“90 天”添加到 2020 年 1 月 1 日,您将获得 2020 年 3 月 31 日...但是如果您将“2 个月零 29 天”添加到 2020 年 1 月 1 日,您将获得 3 月 30th 2020 年。

    【讨论】: