0

なぜ私が異なる月の値を取得しているのかを理解するのを手伝ってもらえますか

SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");    
System.out.println(dateFormat.format(cal.getTime()) 
                   + "--" 
                   + cal.get(Calendar.MONTH));

驚くほど表示されます

09/09/2012--8
4

5 に答える 5

1

カレンダーの月は 0 から始まります

于 2012-10-20T08:59:55.853 に答える
1

他の答えは正しいです。java.util.Calendar クラスは、月数にゼロベースのカウントを使用します。java.util.Date/Calendar クラスの使用を避けるべき多くの理由の 1 つです。

Joda-Time 2.3 ライブラリを使用すると、この種の作業が簡単になります。ありがたいことに、1 月 = 1、12 月 = 12 などの 1 ベースのカウントを賢明に使用しています。

java.util.Calendar cal = java.util.Calendar.getInstance();

// Though not required here for this one purpose, it's better to specify a time zone than rely on default.
DateTimeZone timeZone = DateTimeZone.forID( "America/Montreal" );
DateTime dateTime = new DateTime( cal.getTime(), timeZone );

// Extract month. Note how these two lines call similar sounding methods that are actually quite different.
// One returns a primitive int value. The other returns an object of nested class DateTime.Property.
int monthNumber = dateTime.getMonthOfYear();
String monthName = dateTime.monthOfYear().getAsText( Locale.FRENCH );

コンソールにダンプ…</p>

System.out.println( "dateTime: " + dateTime );
System.out.println( "monthNumber: " + monthNumber );
System.out.println( "monthName: " + monthName );

実行すると…</p>

dateTime: 2014-02-10T02:58:35.386-05:00
monthNumber: 2
monthName: février
于 2014-02-10T08:03:12.040 に答える