前人未踏の領域へ Androidアプリ開発編

Androidアプリ開発に関する調査メモ置き場。古い記事にはアプリ以外も含まれます。

末日の取得

Javaには末尾の取得関数がないと思っていたら、あった。getActualMaximum()がそれらしい。試しに下記のようにしてみると、1つ問題が。

Calendar c = GregorianCalendar.getInstance();
int date = c.getActualMaximum(Calendar.DATE);
System.out.println(date);
(出力結果)
30

c.set(Calendar.MONTH,Calendar.FEBRUARY);//2月にしてみる
int date = c.getActualMaximum(Calendar.DATE);//末尾を取得
System.out.println(c.getTime());//日付を出力
System.out.println(date);//末尾を出力
(出力結果)
Wed Mar 01 17:00:22 JST 2006
31

あれ?2月にならないぞ。・・・とあせってみたものの、原因が判明。今日が6月29日だから2月29日=3月1日と判定されてるのね。それにも対応すると、

Calendar c = GregorianCalendar.getInstance();
c.set(Calendar.MONTH,Calendar.FEBRUARY);//2月にする
c.set(Calendar.DATE,1);//1日にする
int date = c.getActualMaximum(Calendar.DATE);//末尾を取得
System.out.println(c.getTime());//日付を出力
System.out.println(date);//末尾を出力
(出力結果)
Wed Feb 01 17:05:17 JST 2006
28

なんか不便だ。共通クラス作ろう。でもcommonsとかにすでにあるんだろうな。