2

我正在尝试计算不同日期之间有多少天。正如主题所说,我得到了一个负值。我想我可以只取绝对值,但它返回负值的事实让我怀疑计算是否正确。下面是我的代码:

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

4 回答 4

12

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

为什么?nextDay早于previousDay,所以减法当然previousDay会得到否定的结果。

您实际上是在问“我需要增加多少天previousDay才能达到nextDay?答案是 -28。

我关心的这里的名称——我希望一个nextDay值总是晚于一个previousDay值——所以要么你找到这些值的方式不正确,要么你需要更改名称以使含义更清晰。就同​​一上下文而言,大概它们不是“下一个”和“上一个”。

于 2013-09-26T12:38:46.480 回答
8

这是预期的行为

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

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

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

于 2013-09-26T12:44:14.987 回答
5

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

于 2013-09-26T12:40:11.573 回答
2

当然 3-31 给出 -28,但由于我们希望它显示天数,所以它不返回正值是没有意义的。难道我做错了什么?

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

您可以先检查哪个日期较大,然后从较大的日期中减去较小的日期

TimeSpan differenceInDays;
double xAxisValue;
if(nextDay > previousDay )
{
    differenceInDays = (nextDay - previousDay); 
}
else
{
    differenceInDays = (previousDay - nextDay); 
}
xAxisValue = differenceInDays.TotalDays;
于 2013-09-26T12:43:30.423 回答