我正在尝试计算不同日期之间的天数。就像话题所说的那样,我得到的是负值。我想我可以采取绝对值,但它返回负值的事实让我怀疑计算是否正确。以下是我的代码:
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
答案 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,但由于我们希望它显示两者之间的日期,因此它没有返回正值是没有意义的。我做错了吗?
我认为你事先知道哪个日期更大。你的命名只是令人困惑。
您可以先检查哪个日期更大,然后从较大的
中减去LesserTimeSpan differenceInDays;
double xAxisValue;
if(nextDay > previousDay )
{
differenceInDays = (nextDay - previousDay);
}
else
{
differenceInDays = (previousDay - nextDay);
}
xAxisValue = differenceInDays.TotalDays;