[Java][Tips] Calendar#get(Calendar.MONTH)の戻り値

研修なんかでJavaの文法やAPIを教えていると、なぜそんな仕様なんだろう、と思うものが結構あります。

ということで、「どうしてこんな仕様にしてしまったのでしょう」シリーズ第2回は、java.util.Calendar#get(int)メソッド(引数Calendar.MONTH)です。CalendarクラスのgetメソッドにはCalendarクラスのstaticフィールドを指定することで、保持している日時の好きなフィールドを取得することが出来ます。たとえば、次のようなコードでは、システム時刻の年月日を表示させることが出来るわけです(import/import staticは適宜行っているものとします)。

Date d = new Date();
Calendar cal = new GregorianCalendar();
cal.setTime(d);
System.out.println(cal.get(YEAR));
System.out.println(cal.get(MONTH));
System.out.println(cal.get(DATE));

今日は2009年6月22日ですから、表示結果は

2009
6
22

となることが予想されますが、実行結果は


2009
5
22

となってしまいます。つまり、Calendar#get(Calendar.MONTH)の戻り値は「月」なんですが、1月が「0」、12月が「11」なのです。

もしかすると、何か、深い意味があるのかもしれませんが、 素直に考えれば、年も日も値どおり2009年は「2009」、22日は「22」で取得できるようになっているのですから、月も値どおり取得できるようにしても良かったのではないかと思いますよね。

また、思いついたら、エントリをあげたいと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です