Calendarで月末を取得

スポンサーリンク

こんにちは。「Javaを復習する初心者」です。

今回はCalendarクラスを使って月末の日にちを取得する方法について書きます。

スポンサーリンク

2つの方法

ネットで色々調べたのですが、2つあるようです。一つ目は「getActualMaximumメソッドを使う方法」、二つ目は「翌月初日から1日減算する方法」です。この2つの方法それぞれで、今回は2016年2月の末日を算出してみました。以下、2つの方法と処理の概要です。

getActualMaximumメソッドを使う方法
  1. インスタンス取得
  2. clearメソッド呼び出し(念のため)
  3. setメソッドで2016年2月1日を設定
  4. getActualMaximumメソッドを引数Calendar.DATEで呼び出し
    翌月初日から1日減算する方法
    1. インスタンス取得
    2. clearメソッド呼び出し(念のため)
    3. setメソッドで2016年3月1日を設定
    4. addメソッドで1日減算
    5. 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クラスで月末を取得する方法の速さ比較」に載せました。