C# 时间跨度包含一年

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

我有两个日期,一个开始(1/1/15)一个结束(31/12/16)

我需要根据总金额(20000)和基于365天的年度金额计算每天的金额

我使用Timespan获取开始日期和结束日期之间的天数,但在本例中,它返回731(365+366),因为2006年是闰年

但我需要的是在没有闰日的情况下得到730,有什么方法可以做到这一点吗

谢谢
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)(dt2-dt1)。Days
也返回730,所以我不再理解这个问题。是的,但是应该让用户在这里看到。用更数学的表示法,它是范围[startdate,enddate][因此,你必须补充。这是你解决方案中的关键点。这很有效!非常感谢,我正在处理每年的循环,并四处检查起点和终点是在闰日之前还是之后,它变得又大又乱,非常感谢
int days = DaysDiffMinusLeapYears(new DateTime(15, 1, 1), new DateTime(16,12,31));