2013-09-26 154 views
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; 

Ofcourse 3-31给出了-28,但由于我们想让它显示之间的天,这是没有意义的,它不返回正值。难道我做错了什么?

我也尝试过这种做法:

(a - b).TotalDays 

其中a和b是类型Datime

+2

只要做一个数学'Math.Abs​​'并继续与您的生活;-) –

+0

认真?只要拿着'Abs()',一切都会好起来的。 –

+0

或确保第二天晚于前一天;) – Kaf

回答

12

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

为什么? nextDay早于previousDay,所以当然减去previousDay会给出负面结果。 ?

你有效地问:“多少天,我需要添加到previousDay为了得到nextDay答案是-28

什么确实关心我的名字在这里 - 我” d期望nextDay的值总是晚于previousDay的值 - 所以无论您如何找到这些值都是不正确的,或者您需要更改名称以使意思更清晰,推测它们不是“下一个”和“以前“在相同的背景下。

4

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

+0

不知道这是否是原因,但它是一个很好的抓住! – Kaf

+1

也许它存在于OP的定制“GregorianCalender”中...... –

+0

事实上,它可能存在于他的日历中,因为他没有提及任何异常情况。 –

2

Ofcourse 3-31给出-28,但既然我们希望它显示几天之间,它没有任何意义,它不会返回一个正值。难道我做错了什么?

我认为你不知道哪个日期比较大,而且你的命名只是令人困惑。

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

TimeSpan differenceInDays; 
double xAxisValue; 
if(nextDay > previousDay) 
{ 
    differenceInDays = (nextDay - previousDay); 
} 
else 
{ 
    differenceInDays = (previousDay - nextDay); 
} 
xAxisValue = differenceInDays.TotalDays; 
0

的DateTime theDate = DateTime.Today;

int datediff = theDate.Subtract(expiryDate).Negate()。天;

如果expiryDate> theDate那么你得到负值:-14 expiryDate小于theDate然后你正值:14

您可能显然希望这个方案中的如

Send a Notification Email 14 days before expiry 
Send another notification Email 14 days after expiry 

你需要一个可能是负值的差异,以便发送适当的电子邮件

相关问题