计算两个日期之间的年、月、日
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 日,那就是两天.
我试图在我创建的 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 日,那就是两天.