34

次のコードを使用しています

Calendar cal = Calendar.getInstance();
System.out.println("Before "+cal.getTime());
cal.set(Calendar.MONTH, 01);
System.out.println("After "+cal.getTime());

出力は

Before Thu Jan 31 10:07:34 IST 2013
After Sun Mar 03 10:07:34 IST 2013

1月に追加+1するための3月の月を与えてます。現在の日付に 30 日を追加すると、正しい出力が返される可能性があります。しかし、私は2月を表示したいです。どんな体でも私を助けてくれませんか..

4

4 に答える 4

61

+1 to set フィールドが、日付とは異なる 30 日間の日付を追加していることがわかります (出力から観察されます)。

月が必要な場合は、コードを使用してください

Calendar cal = Calendar.getInstance();
System.out.println("Before "+cal.getTime());  //Before Thu Jan 31 10:16:23 IST 2013

cal.add(Calendar.MONTH, 1);
System.out.println("After "+cal.getTime()); //After Thu Feb 28 10:16:23 IST 2013
于 2013-01-31T04:46:08.587 に答える
7

add()次のように使用する必要があります。

cal.add(Calendar.MONTH, 1);

出力 ->

Before Thu Jan 31 10:15:04 IST 2013
After Thu Feb 28 10:15:04 IST 2013
于 2013-01-31T04:46:28.077 に答える
1
cal.set(Calendar.MONTH, cal.get( Calendar.MONTH ) + 1 );

とにかく表示される理由Mar 3は、明らかに 30 日を追加するためですが、これはFeb 31st存在しないため、 に移動しMar 3ます。

代わりに翌月の最終日が必要な場合は、次のようにします。

int month = cal.get( Calendar.MONTH );
cal.set(Calendar.MONTH, cal.get(Calendar.MONTH) + 1);
if( cal.get( month ) > month + 1 ) {
    cal.set( Calendar.MONTH, month + 1 );
    cal.set( Calendar.DAY, /* here comes your day amount finding algorithm */ );
}
于 2013-01-31T04:42:14.600 に答える