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 に答える