我对下面的代码有一个小问题,'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");
}
由于
答案 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");
}