私は、オーバーラップしてギャップを含むことができる一連の[startdate、enddate]区間を持っています。 私の目標は、連続した新しい間隔のリストを作成することです。間隔はなく、重複する日付はありません。範囲のオーバーラップを分割して不足する区間を追加する
例:私は何を期待
[-----------------------------------A-----------------------]
[-B]
[-C]
[D]
[-----E-----]
[-----F----]
[-----G-----]
A [2009-01-01 - 2014-01-01] ~5 years
B [2009-01-01 - 2009-01-02] 2 days
C [2009-01-02 - 2009-01-03] 2 days
D [2009-01-04 - 2009-01-04] 1 day
E [2010-01-01 - 2011-01-01] ~1 year
F [2011-01-01 - 2012-01-01] ~1 year, a gap after this interval
G [2015-01-01 - 2016-01-01] ~1 year
は間隔のこの新しいリストである:
ので[2009-01-01 - 2009-01-01]
[2009-01-02 - 2009-01-02]
[2009-01-03 - 2009-01-03]
[2009-01-04 - 2009-01-04]
[2009-01-05 - 2009-12-31]
[2010-01-01 - 2010-12-31]
[2011-01-01 - 2012-01-01]
[2012-01-02 - 2014-01-01]
[2014-01-02 - 2014-12-31]
[2015-01-01 - 2016-01-01]
、ギャップのために新しい間隔がありますが追加されました。同じ開始日と終了日の間隔は完全に有効で、そのように処理する必要があります。
私も効率的な方法でこれを取得する前に、これを達成するための最良の方法の両方にかなりこだわっています:(
Javaでこれを行う方法上の任意のアイデア?
java8を使用する場合は、java.time.Periodを使用できます。次に、すべての期間をソートし、2つの連続期間の開始/終了を比較します。 – Heri
@Heriいいえ、「期間」は開始日も終了日もありません(日付行に固定されていません)。 OPには間隔の解決策が必要です。 –
期間は、問題を解決するために使用できる多くの操作を提供します。between()は、2つのLocalDateを使用して構築します。 addTo()とsubtractFrom()を使用すると、計算を行うことができます – Heri