首页 > 解决方案 > 使用 `Period.Between` 和减去两个本地日期之间的区别

问题描述

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

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

解决方案


您的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 日,您将获得 2020 年 3 月30 日


推荐阅读