C# 时间跨度包含一年
我有两个日期,一个开始(1/1/15)一个结束(31/12/16) 我需要根据总金额(20000)和基于365天的年度金额计算每天的金额 我使用Timespan获取开始日期和结束日期之间的天数,但在本例中,它返回731(365+366),因为2006年是闰年 但我需要的是在没有闰日的情况下得到730,有什么方法可以做到这一点吗 谢谢C# 时间跨度包含一年,c#,datetime,timespan,leap-year,C#,Datetime,Timespan,Leap Year,我有两个日期,一个开始(1/1/15)一个结束(31/12/16) 我需要根据总金额(20000)和基于365天的年度金额计算每天的金额 我使用Timespan获取开始日期和结束日期之间的天数,但在本例中,它返回731(365+366),因为2006年是闰年 但我需要的是在没有闰日的情况下得到730,有什么方法可以做到这一点吗 谢谢 Aj也许有一种更有效的方法,但这是可以预期的: public static int DaysDiffMinusLeapYears(DateTime dt1, Dat
Aj也许有一种更有效的方法,但这是可以预期的:
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;
}
结果:730你可以检查你的日期是否包含闰年,如果是这样的话,然后从计数中减去那么多天。但如果我有一个范围,从2015年到2025年,2016年和2020年都是年,我想避免循环,尽管每年的日期都是从1月1日到12月31日吗?因为如果是这样,答案肯定是
int days=365*(endYear-startYear+1)那些跳跃的耳朵真烦人!如果你将年度金额除以天,但忽略闰日,那么你的总数在月底不会累加。。。天啊。这就像计算一个月的数量,但坚持所有月份都有28天——月和年是时间的量度,它们包含的天数本质上是可变的。我认为“+1”是至关重要的。也许你可以再解释一下,并给出一个没有闰年的例子,这是正确的。@MareInfinitus:这只是把结束日期包括在计算中,否则它将被排除在外。但是,目前我不确定这个答案是否有用,因为(dt2-dt1)。Days
也返回730,所以我不再理解这个问题。是的,但是应该让用户在这里看到。用更数学的表示法,它是范围[startdate,enddate][因此,你必须补充。这是你解决方案中的关键点。这很有效!非常感谢,我正在处理每年的循环,并四处检查起点和终点是在闰日之前还是之后,它变得又大又乱,非常感谢
int days = DaysDiffMinusLeapYears(new DateTime(15, 1, 1), new DateTime(16,12,31));