计算两个日期之间的差异返回一个负数

时间:2013-09-26 12:36:04

标签: c# datetime

我正在尝试计算不同日期之间的天数。就像话题所说的那样,我得到的是负值。我想我可以采取绝对值,但它返回负值的事实让我怀疑计算是否正确。以下是我的代码:

DateTime previousDay = new DateTime(1998, 6, 31, new GregorianCalender());
DateTime nextDay = new DateTime(1998, 6, 3, new GregorianCalender());

TimeSpan differenceInDays = (nextDay - previousDay); 
double xAxisValue = differenceInDays.TotalDays;

当然,3-31给出-28,但由于我们希望它显示之间的天数,因此它没有返回正值是没有意义的。我做错了吗?

我也试过这种方法:

(a - b).TotalDays

其中a和b的类型为Datime

4 个答案:

答案 0 :(得分:12)

  

我想我可以采取绝对值,但它返回负值的事实让我怀疑计算是否正确。

为什么呢? nextDay早于previousDay,因此当然减去previousDay会产生负面结果。

您有效地问“我需要在previousDay添加nextDay多少天才能到达nextDay?答案是-28。

关注我的是这里的名字 - 我希望previousDay值始终晚于{{1}}值 - 所以要么就是你的方式找到这些值是不正确的,或者您需要更改名称以使含义更清晰。据推测,就同样的情况而言,他们不是“下一个”和“前一个”。

答案 1 :(得分:6)

这是预期行为

您应该使用 TimeSpan.Duration()方法。

它返回一个新的TimeSpan对象,其值是当前TimeSpan对象的绝对值。

http://msdn.microsoft.com/en-us/library/system.timespan.duration.aspx

答案 2 :(得分:4)

我认为这是因为日历中没有“1998-06-31”日期。

答案 3 :(得分:2)

  

当然,3-31给出-28,但由于我们希望它显示两者之间的日期,因此它没有返回正值是没有意义的。我做错了吗?

我认为你事先知道哪个日期更大。你的命名只是令人困惑。

您可以先检查哪个日期更大,然后从较大的

中减去Lesser
TimeSpan differenceInDays;
double xAxisValue;
if(nextDay > previousDay )
{
    differenceInDays = (nextDay - previousDay); 
}
else
{
    differenceInDays = (previousDay - nextDay); 
}
xAxisValue = differenceInDays.TotalDays;