25

2つの日付の日数の違いを見つける必要があります。

例えば:

入力:**startDate** = 12-31-2012 23hr:59mn:00sec, **endDate** = 01-01-2013 00hr:15mn:00sec

期待される出力:1

私は次のことを試しました:

  1. (dt1-dt2).TotalDaysそして整数に変換しますが、doubleをintに変換する必要があるため、適切な答えが得られませんでした-Math.Ceiling、Convert.To..を試してみました。
  2. dt1.day - dt2.day数ヶ月間は機能しません
  3. dt.Substract()上記のオプション1と同じ出力があります。

上記のどれもうまくいかなかったので、私は次のコードを書くことになりました。コードはうまく機能しますが、数行のコードだけで解決策が必要だと思います。

public static int GetDifferenceInDaysX(this DateTime startDate, DateTime endDate)
    {
        //Initializing with 0 as default return value
        int difference = 0;

        //If either of the dates are not set then return 0 instead of throwing an exception
        if (startDate == default(DateTime) | endDate == default(DateTime))
            return difference;

        //If the dates are same then return 0
        if (startDate.ToShortDateString() == endDate.ToShortDateString())
            return difference;

        //startDate moving towards endDate either with increment or decrement
        while (startDate.AddDays(difference).ToShortDateString() != endDate.ToShortDateString())
        {
            difference = (startDate < endDate) ? ++difference : --difference;
        }

        return difference;
    }

注:最大差は30〜45日を超えないため、whileループの反復でパフォーマンスの問題は発生しません。

4

3 に答える 3

63

さて、時間の要素を無視して、日数の違いが必要なようです。DateTime時間コンポーネントが00:00:00にリセットされたAは、Dateプロパティが提供するものです。

(startDate.Date - endDate.Date).TotalDays
于 2012-10-23T06:15:48.360 に答える
11

プロパティを使用する場合、DateTime.Dateこれは時間を排除します

date1.Date.Subtract(date2.Date).Days
于 2012-10-23T06:15:36.683 に答える
3

TimeStampを使用します。( DateTime.Dateプロパティを使用して)2つの日付を減算し、期間の差を取得してTotalDaysを返すだけです。

TimeSpan ts = endDate.Date - startDate.Date;
double TotalDays = ts.TotalDays;

したがって、拡張メソッドは次のように単純にすることができます。

public static int GetDifferenceInDaysX(this DateTime startDate, DateTime endDate)
    {
      return (int) (endDate.Date - startDate.Date).TotalDays;
      // to return just a int part of the Total days, you may round it according to your requirement
    }

編集:質問が編集されているので、次の例を確認できます。次の2つの日付を考慮してください。

DateTime startDate = new DateTime(2012, 12, 31, 23, 59, 00);
DateTime endDate = new DateTime(2013, 01, 01, 00, 15, 00); 

拡張メソッドは次のように記述できます。

public static int GetDifferenceInDaysX(this DateTime startDate, DateTime endDate)
    {
        TimeSpan ts = endDate - startDate;
        int totalDays = (int) Math.Ceiling(ts.TotalDays);
        if (ts.TotalDays < 1 && ts.TotalDays > 0)
            totalDays = 1;
        else
            totalDays = (int) (ts.TotalDays);
        return totalDays;
    }

上記の日付の場合、それはあなたに1を与えます

于 2012-10-23T06:15:31.207 に答える