0

タイムスパンを計算するプログラムを書いていますが、計算が正しくないようです。

私が基本的にやろうとしているのは、特定の日付範囲が到着日と終了日の間にあるかどうかを計算することです。

(----(--------------)------) これは、入力された日付範囲を内側の括弧として使用して、到着日と終了日を表します。私は基本的に、内側の括弧の外側にある日付を気にしません。それが意味がある場合は、それらが外側の範囲内にあるかどうかを確認するだけです。

しかし、入力された日付範囲と重複する到着日と終了日がある場合、そこで何をすべきかという別の問題が発生します。

入力された日付と重複する日付のみが考慮されます。これはすべて私には理にかなっています。コードでそれを表現する方法がわかりません.以下の例は後者を達成しようとしています(かなりずさんですが)、実際に正しい結果をもたらすより効率的な方法があるでしょうか. ?

        DateTime arrivalDate = new DateTime(2012,10,15);
        DateTime releaseDate = new DateTime(2013,01,20);
        DateTime enteredDate = new DateTime(2012,10,01);
        DateTime enteredEnd = new DateTime(2012,12,31);

        TimeSpan begin = TimeSpan.MinValue;
        TimeSpan end = TimeSpan.MinValue;

        if (arrivalDate <= enteredDate)
            begin = enteredDate - arrivalDate;

        else if (arrivalDate >= enteredDate)
            begin = arrivalDate - enteredDate;

        if (releaseDate <= enteredEnd)
            end = enteredEnd - releaseDate;

        else if (releaseDate >= enteredEnd)
            end = releaseDate - enteredEnd;

        TimeSpan total = begin + end;
        TimeSpan benchmark = releaseDate - arrivalDate;
        TimeSpan other = benchmark - total;

        Console.WriteLine("There are " + begin.Days + " days in begin.");
        Console.WriteLine("There are " + end.Days + " days in end.");

        Console.WriteLine("There are " + other.Days + " days in the range.");         
4

1 に答える 1

0

オーバーラップの量を決定するには:

DateTime arrivalDate = new DateTime(2012, 10, 15);
DateTime releaseDate = new DateTime(2013, 01, 20);
DateTime enteredDate = new DateTime(2012, 10, 01);
DateTime enteredEnd = new DateTime(2012, 12, 31);

// Whichever of { arrivalDate, enteredDate } is later
DateTime startOverlap = arrivalDate <= enteredDate ? enteredDate : arrivalDate;
// Whichever of { releaseDate, enteredEnd } is earlier
DateTime endOverlap = enteredEnd <= releaseDate ? enteredEnd : releaseDate;

TimeSpan totalOverlap = endOverlap - startOverlap;

Console.WriteLine("There are {0} days of overlap.", totalOverlap.Days);

次に、入力した範囲が期待される範囲内にあるかどうかを判断するには、次のようにします。

TimeSpan enteredRange = enteredEnd - enteredDate;

bool isWithinRange = enteredRange == totalOverlap;
于 2013-02-21T00:35:25.377 に答える