[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」で取得できるようになっているのですから、月も値どおり取得できるようにしても良かったのではないかと思いますよね。

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

[Java][フリー教材] フリー教材 Struts編 3,000ダウンロード突破しました

2008/7/31に公開をはじめましたフリー教材「Struts1日入門」ですが、おかげさまで、6/19までの集計でダウンロード数が「3,115件」(Struts編はPDFのみの提供)となりま し た。

いつも多くの方にご覧頂きまして、誠にありがとうございます。教材に対するご意見、ご感想、ご要望、間違いのご指摘などございましたら、弊社HPのお 問い合わせフォームや、こちらのブログへのコメントでも結構ですので、どうぞよろしくお願いいたします。

また、コンテンツにご興味をお持ちの方には、これらのコンテンツをベースとしたカスタマイズコースの開催も可能です(Struts編についても、既に開催実績があります!)ので、どうぞお気軽にお問い合わせください。

フリー教材のページはこちらです。