• ベストアンサー

Calendarクラスについて

java勉強中の初心者です。 現在、カレンダークラスの勉強をしています。 いろいろ試しているのですが、お聞きしたいこと があります。 末日を取得するgetActualMaximumメソッドですが Calendar cl = Calendar.getInstance(); int lastDay = cl.getActualMaximum(Calendar.DATE); でその月の末日を取得できることがわかりましたが 応用で、1年間の(1月~12月)すべてを取得するときに -------------------------------------------------- Calendar cl = Calendar.getInstance(); for(int n = 1; n<=12; n++){ cl.set(2005,12+n,1); cl.add(Calendar.DAY_OF_MONTH,1); cl.set(cl.get(Calendar.YEAR),cl.get(Calendar.MONTH),cl.getActualMaximum(Calendar.DATE)); System.out.println(cl.get(Calendar.YEAR) +"年"+ cl.get(Calendar.MONTH ) + "月"+ cl.getActualMaximum(Calendar.DATE) +"日"); } } } ------------------------------------------------- 月は「0」から始まるということは理解できたのですが これだと実行結果が 2006年1月28日 2006年2月31日 2006年3月30日 2006年4月31日 2006年5月30日 2006年6月31日 2006年7月31日 2006年8月30日 2006年9月31日 2006年10月30日 2006年11月31日 2007年0月31日 ---------------------------------------------- となってしまうのですが、一番初めが2月の 末日を取得してしまっているのはわかっているのですが どこを直せばよいのかわかりません。 ご教授お願いできますか? よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • alphion
  • ベストアンサー率19% (27/136)
回答No.1

>月は「0」から始まるということは理解できたのですが ということは、セットするときも0から、 >for(int n = 1; n<=12; n++) for(int n = 0; n<12; n++)

camp-fanks
質問者

補足

ご回答ありがとうございます。 n=0にして実行すると 2006年0月31日    ・    ・ 2006年11月31日 どの段階で月に「1」を足すのか・・ cl.setとSystem,outの段階で「1」を 足すととんでもない実行結果が・・・ ここがわかりません。 よろしくお願いします。

その他の回答 (2)

  • tom11
  • ベストアンサー率53% (134/251)
回答No.3

こんにちは、 1月は、あくまでも0として、 出力形式で、調整をすると、良いかと思います。 サンプルリストです。 Calendar ca = Calendar.getInstance(); for(int i=0;i<12;++i){ ca.set(Calendar.MONTH,i); ca.set(Calendar.DATE,1); ca.set(Calendar.DATE,ca.getActualMaximum(Calendar.DATE)); System.out.printf("%1$ty/%1$tm/%1$td \n",ca); } 出力結果は 以下のようになりました。 06/01/31 06/02/28 06/03/31 06/04/30 06/05/31 06/06/30 06/07/31 06/08/31 06/09/30 06/10/31 06/11/30 06/12/31

回答No.2

No.1さんが書いていることだけでは足りなくて、 cl.get(Calendar.MONTH )の値は 1月→0 2月→1 ・・ 12月→11 と格納されるので出力するときに System.out.println(cl.get(Calendar.YEAR) +"年"+ (cl.get(Calendar.MONTH )+1) + "月"+ cl.getActualMaximum(Calendar.DATE) +"日"); とする必要があります。つまり、人間が通常使う数字で月を表示するためには1足さなければいけません。

camp-fanks
質問者

お礼

ありがとうございます。 「1」を足す箇所が間違えておりました。

関連するQ&A

専門家に質問してみよう