- - PR -
Calendarクラスについての質問です。
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-09-23 19:32
「今月の最大値」を求めるため、以下のようなソースを書き
Calendar calendar = Calendar.getInstance(); calendar.set( Calendar.DAY_OF_MONTH, calendar.getMaximum(Calendar.DAY_OF_MONTH)); calendar.set( Calendar.HOUR_OF_DAY, calendar.getMaximum(Calendar.HOUR_OF_DAY)); calendar.set( Calendar.MINUTE, calendar.getMaximum(Calendar.MINUTE)); System.out.println(calendar.get(Calendar.DAY_OF_MONTH));のようにして、このCalenarクラスの日付を求めたところ、 1 と結果が返ってきました。 ためしに、calendar.set(Calendar.MONTH, 9);として月を10月のに設定したところ、 31 と結果が返ってきました。 なぜ、9月は1と帰ってくるのかが分かりません。教えてください。 |
|
投稿日時: 2004-09-23 23:13
calendar.getMaximum(Calendar.DAY_OF_MONTH)は、常に31です。
calendar.set(Calendar.DAY_OF_MONTH, calendar.getMaximum(Calendar.DAY_OF_MONTH)) すると、9月31日に設定しようとして、そんな日付は存在しないので10月1日に変換されます。 10月だったら、問題なく10月31日に設定されるわけです。 「今月の最後の日」を求めるなら、 calendar.set(Calendar.MONTH,1); // x月1日 calendar.roll(Calendar.MONTH,+1); // x+1月1日 calendar.roll(Calendar.DATE,-1); // x月最後の日 のようにすれば良いのでは? (動作確認していません) [ メッセージ編集済み 編集者: coasm 編集日時 2004-09-24 09:08 ] |
|
投稿日時: 2004-09-24 01:00
// 現在日時の生成
Calendar now = Calendar.getInstance(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.S"); // 今月は何日まであるか?(例えば、2004年02月は29。2004年07月は31) int days = now.getActualMaximum(Calendar.DAY_OF_MONTH); System.out.println("今月は "+days+" 日あります"); // その月末は? Calendar endOfTheMonth = new GregorianCalendar(now.get(Calendar.YEAR), now.get(Calendar.MONTH), days); System.out.println("月末は "+formatter.format(endOfTheMonth.getTime())); // 指定された年・月は何日まであるか?(mm=0..11とする) Calendar aDay = new GregorianCalendar(2000, 2-1, 1); // 2月 int days2 = aDay.getActualMaximum(Calendar.DAY_OF_MONTH); System.out.println("2000年2月は "+days2+" 日あります"); こちらにカレンダー関係をまとめてみました。 http://www.hcn.zaq.ne.jp/no-ji/javamemo/java_util_Calendar.html [ メッセージ編集済み 編集者: a-san 編集日時 2004-09-24 01:15 ] |
|
投稿日時: 2004-09-24 09:35
本当にありがとうございます。
getActualMaximumを使って解決することが出来ました。 calendar.set( Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); calendar.set( Calendar.HOUR_OF_DAY, calendar.getActualMaximum(Calendar.HOUR_OF_DAY)); calendar.set( Calendar.MINUTE, calendar.getActualMaximum(Calendar.MINUTE)); |
1