C#两个日期之间的天数问题

时间:2010-05-18 10:59:12

标签: c# date

我对下面的代码有一个小问题,'days'变量似乎总是为0,无论日子分开多远。

你能看到明显错误吗?

        System.TimeSpan span = dates[0] - dates[1]; // e.g. 12/04/2010 11:44:08 and 18/05/2010 11:52:19
        int days = (int)span.TotalDays;

        if (days > 10) //days always seems to be 0
        {
            throw new Exception("Over 10 days");
        }

由于

5 个答案:

答案 0 :(得分:6)

当您从较早的日期减去较晚的日期时,根据您的评论,TotalDays将为负数。在您的示例中,-36。

因此(days > 10)的比较将失败。你应该使用

int days = Math.Abs((int)span.TotalDays);

假设您没有将日期[0]设置为等于日期[1],则没有理由为您的评论中的样本日期TotalDays将返回零。

答案 1 :(得分:4)

总天数应为负数,但在任何情况下都不为零,因为您从较晚的日期减去较早的日期。似乎dates[0]dates[1]不包含您的想法。

答案 2 :(得分:1)

我刚试过这个:

DateTime date1 = new DateTime(2010, 12, 31);
DateTime date2 = new DateTime(2010, 1, 1);

TimeSpan timeSpan = date2 - date1;
Console.WriteLine(timeSpan.TotalDays);

此程序生成输出:-364。所以它应该完美的工作! 一个问题:您是否将DateTime[]用于dates - 数组?

BTW:days > 10不会检查days是否为零。

答案 3 :(得分:0)

如果我们假设您的代码看起来与此类似,并且日期数组已正确填充,则此处没有任何错误会导致天数正好为零。也许检查一下你的日期数组中是否有正确的值?除此之外,发布更多代码?

答案 4 :(得分:0)

要么这样做:

System.TimeSpan span = dates[0] - dates[1]; 
int days = Math.Abs((int)span.TotalDays);

if (days > 10)
{
    throw new Exception("Over 10 days");
}

或者这个:

System.TimeSpan span = dates[1] - dates[0]; 
int days = (int)span.TotalDays;

if (days > 10)
{
    throw new Exception("Over 10 days");
}