时间跨度包含闰年
Timespan contains leapyear
我有 2 个日期,一个开始 (1/1/15) 一个结束 (31/12/16)
我需要从总金额 (20,000) 和基于 365 天的年度金额中计算出每天的金额,
我正在使用 Timespan 来获取开始日期和结束日期之间的天数,但在这种情况下,它 returns 731 (365 + 366) 因为 2006 年是闰年,
但是我需要的是在没有闰日的情况下得到 730,有什么办法可以做到这一点
谢谢
阿杰
也许有更有效的方法,但它按预期工作:
public static int DaysDiffMinusLeapYears(DateTime dt1, DateTime dt2)
{
DateTime startDate = dt1 <= dt2 ? dt1.Date : dt2.Date;
DateTime endDate = dt1 <= dt2 ? dt2.Date : dt1.Date;
int days = (endDate - startDate).Days + 1;
int daysDiff = Enumerable.Range(0, days)
.Select(d => startDate.AddDays(d))
.Count(day => day.Day != 29 || day.Month != 2);
return daysDiff;
}
您的样本:
int days = DaysDiffMinusLeapYears(new DateTime(15, 1, 1), new DateTime(16,12,31));
结果:730
我有 2 个日期,一个开始 (1/1/15) 一个结束 (31/12/16)
我需要从总金额 (20,000) 和基于 365 天的年度金额中计算出每天的金额,
我正在使用 Timespan 来获取开始日期和结束日期之间的天数,但在这种情况下,它 returns 731 (365 + 366) 因为 2006 年是闰年,
但是我需要的是在没有闰日的情况下得到 730,有什么办法可以做到这一点
谢谢 阿杰
也许有更有效的方法,但它按预期工作:
public static int DaysDiffMinusLeapYears(DateTime dt1, DateTime dt2)
{
DateTime startDate = dt1 <= dt2 ? dt1.Date : dt2.Date;
DateTime endDate = dt1 <= dt2 ? dt2.Date : dt1.Date;
int days = (endDate - startDate).Days + 1;
int daysDiff = Enumerable.Range(0, days)
.Select(d => startDate.AddDays(d))
.Count(day => day.Day != 29 || day.Month != 2);
return daysDiff;
}
您的样本:
int days = DaysDiffMinusLeapYears(new DateTime(15, 1, 1), new DateTime(16,12,31));
结果:730