2016-08-17 10 views
-2

Java 1.7のGregorianCalenderに問題があります。私はJava 8への移行を知っているか、またはJodaを使用して問題を解決できるかもしれませんが、残念ながらこれはオプションではありません。Java 1.7 GregorianCalendarが間違った日付を計算する

私は終了日を計算するために365日を追加しようとしています(365日を追加するのはばかばかしいかもしれませんが、1年追加するだけではありませんがクライアントが要求したものです。彼はうるう年を無視したいので)。

一般的にはすべてうまくいきますが、次の単体テストでは彼と私の期待には合致しません。私は数回それを再計算し、私の結果を確認するために様々なツールを使用したが、私はちょうどjavaの計算を確認することはできません。

@Test 
public void test(){ 
    // Get a Gregorian Calendar 
    Calendar cal = GregorianCalendar.getInstance(); 

    // Remove whatever was stored previously 
    cal.clear(); 

    // Set calendar to 2004-10-23 
    cal.set(2004, Calendar.OCTOBER, 23); 

    // Add 365 days 
    cal.add(Calendar.DAY_OF_YEAR, 365); 

    // Calendar should be at 2005-10-22 now 
    Assert.assertEquals(2005, cal.get(Calendar.YEAR)); 
    Assert.assertEquals(Calendar.OCTOBER, cal.get(Calendar.MONTH)); 
    Assert.assertEquals(22, cal.get(Calendar.DAY_OF_MONTH)); 
} 

それはで失敗します:

java.lang.AssertionError: expected:<22> but was:<23> 

私が何か間違ったことをやっている、それは間違った日付を返しますので、ここで

は、失敗します私のユニットテストですか?

答えて

6

あなたはから 2004年から2005年10月までです。閏年はありません。そのため、月の日はまだ23日です。さて、あなたが2003年から2023年に始めるなら、それは違うでしょう。

関連する問題