こんにちは。「Javaを復習する初心者」です。
今回はCalendarクラスを使って月末の日にちを取得する方法について書きます。
2つの方法
ネットで色々調べたのですが、2つあるようです。一つ目は「getActualMaximumメソッドを使う方法」、二つ目は「翌月初日から1日減算する方法」です。この2つの方法それぞれで、今回は2016年2月の末日を算出してみました。以下、2つの方法と処理の概要です。
- getActualMaximumメソッドを使う方法
-
- インスタンス取得
- clearメソッド呼び出し(念のため)
- setメソッドで2016年2月1日を設定
- getActualMaximumメソッドを引数Calendar.DATEで呼び出し
- 翌月初日から1日減算する方法
-
- インスタンス取得
- clearメソッド呼び出し(念のため)
- setメソッドで2016年3月1日を設定
- addメソッドで1日減算
- getメソッドを引数Calendar.DATEで呼び出し
ソースと実行結果
上記の方法をプログラミングしました。以下、ソースと実行結果です。
ソースコード
package calendarTest;
import java.util.Calendar;
public class HelloEndDay {
public static void main(String[] args) {
Calendar c;
int day;
// getActualMaximumメソッドを使う方法
System.out.println("getActualMaximumメソッドを使う方法");
c = Calendar.getInstance();
c.clear();
c.set(2016, 1, 1);
day = c.getActualMaximum(Calendar.DATE);
System.out.println(day);
// 翌月初日から1日減算する方法
System.out.println("翌月初日から1日減算する方法");
c.clear();
c.set(2016, 2, 1);
c.add(Calendar.DATE, -1);
day = c.get(Calendar.DATE);
System.out.println(day);
}
}
結果
getActualMaximumメソッドを使う方法
29
翌月初日から1日減算する方法
29
解説
どちらの方法でも末日が取得できました。2016年はうるう年なので、2月末日は29日です。どちらの方法が適切なのか、判断の仕方は分かりませんでした。ただ、実際に計算にかかる時間を計測した結果、「翌月初日から1日減算する方法」の方が速かったです。
それぞれ1000回ずつ実行し、ミリ秒を計測するということを実施しました。その結果、getActualMaximumメソッドを使う方が遅かったです。プログラムの方はQiitaのページ「Calendarクラスで月末を取得する方法の速さ比較」に載せました。