java-beginner.com ブログ

プログラミングを学習するブログ(Javaをメインに)

Calendarで月末を取得

投稿日:

最終更新日:2016年07月17日

アイキャッチ

こんにちは。「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クラスで月末を取得する方法の速さ比較」に載せました。