6

2 つの間の (包括的) カバーされた日付の数を数えたいと考えていますDateTimes

これは .TotalDays、24 時間未満の期間でも、2 つの異なる日が重なって「2」が返される可能性があるためではありません。同様に、2 分離れた日付でも「1」が返されます。

例えば:

2012-2-1 14:00 to 2012-2-2 23:00 -> 2 (1st and 2nd Feb)
2012-2-1 14:00 to 2012-2-2 10:00 -> 2 (1st and 2nd Feb)
2012-2-1 23:00 to 2012-2-2 00:00 -> 2 (1st and 2nd Feb)
2012-2-1 23:00 to 2012-2-3 00:00 -> 3 (1st, 2nd, 3rd Feb)
2012-2-1 14:00 to 2012-2-1 15:00 -> 1 (1st Feb)
2012-2-1 14:00 to 2012-2-1 14:00 -> 1 (1st Feb)
2012-1-1 00:00 to 2012-12-31 23:59 -> 366 (All of 2012)

以下のコードでこの機能を取得できます。

DateTime dt1 = new DateTime(2000,1,2,12,00,00);
DateTime dt2 = new DateTime(2000,1,3,03,00,00);

int count = 0;
for (DateTime date = dt1; date.Date <= dt2.Date; date = date.AddDays(1))
    count++;

return count;

より良い方法はありますか?

4

4 に答える 4

19

それだけではない理由:

int count = dt1.Date.Subtract(dt2.Date).Duration().Days + 1;

を使用.Dateすると、日付が真夜中 (0:00) に正規化され、 に 1 が追加されてDays、その間の日数だけでなく、異なる日付の数が取得されます。

を使用Durationすると、常に肯定的な答えが得られます。

于 2012-12-20T11:02:07.390 に答える
7

おそらく単純に

TimeSpan duration = dt2.Date - dt1.Date;
int days = duration.Days + 1;

デモ

于 2012-12-20T11:05:47.150 に答える
0
DateTime d1=DateTime.MinValue;
DateTime d2=DateTime.MaxValue;
TimeSpan span=d2-d1;
int counter = span.Days + 1;
于 2012-12-20T11:02:37.833 に答える
0

Math.Ceiling((d2 - d1.Date).TotalDays)

あなたが言及したすべてのケースを試しました。そして結果が期待されます!それが役に立てば幸い。

于 2012-12-20T11:16:29.863 に答える