2017-05-01 31 views
3

私はjava.time.Period#getDays()を使用して、LocalDate秒の日数を取得します。2つの日付間の期間を取得する

ほとんどの場合はうまくいくように見えますが、1か月間は0日間の期間があります。

次のテストケースは(java.lang.AssertionError: expected:<30> but was:<0>)失敗:

@Test 
public void testOneMonthPeriodDays() { 
    Period p = Period.between(LocalDate.of(2017, 06, 01), LocalDate.of(2017, 07, 01)); 
    assertEquals(30, p.getDays()); 
} 
+0

私は同じ結果を確認することができます。 – bhspencer

+2

私はp.getMonths()== 1を賭けるでしょう。 'Period'は年、月、日のカウントです。あなたのケースは1ヶ月と0日になります。 – GriffeyDog

答えて

5

私は、これは正しい結果であると考えています。次のテストを実行すると、getMonths()が1を返すことがわかります。getDaysは合計日数を取得するのではなく、残りの日数を取得するようです。 2つの日付の間の日数の合計数を取得するには

@Test 
public void testOneMonthPeriodDays() { 
    Period p = Period.between(LocalDate.of(2017, 06, 01), LocalDate.of(2017, 07, 01)); 
    assertEquals(0, p.getDays()); 
    assertEquals(1, p.getMonths()); 
} 

はその質問に与えられた答えを引用すると、この質問Calculate days between two dates in Java 8

を参照してください。java.time.Period#getDays()ため

LocalDate dateBefore; 
LocalDate dateAfter; 
long daysBetween = DAYS.between(dateBefore, dateAfter); 
+2

既に存在するので、その質問へのリンクを表示する方が良いでしょうか? – bhspencer

+0

申し訳ありませんが、私は答えへのリンクを逃しました。合意したうん、私はそれが編集でうまくいくと思う。ありがとう。 – Gray

1

のJavaDocは言う:

は、この期間の日数を返します。負の値を持つ可能性があります。

私はこれはミスリーディングであり、実際には合計日数を返さないと思います。

私は今、期待どおりに動作

final long daysElapsed = ChronoUnit.DAYS.between(LocalDate.of(2017, 06, 01), LocalDate.of(2017, 07, 01)); 

を使用しています。

0

次の操作を行います。

長いdaysDifference = DAYS.between(dayInitial、dayAfter)。

LOCALDATE dateInitial。 LocalDate dateAfter;

関連する問題