こんにちは。ハンドルネーム「Javaを復習する初心者」です。このサイトはプログラミング言語Javaの復習・学習をするブログです。プログラムの開発・実行はEclipseで行ってます。
スポンサーリンク
お知らせ
  • 参考文献のページ作りました。
  • Amazon.co.jpアソシエイトに参加していますが、参考文献の紹介はもしもアフィリエイトに統一しました。
  • 2016年10月9日からは投稿ペースを落とします。週1回くらいにする予定です。
スポンサーリンク

Calendarで月末を取得

こんにちは。「Javaを復習する初心者」です。今回はCalendarクラスを使って月末の日にちを取得する方法について書きます。

ネットで色々調べたのですが、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クラスで月末を取得する方法の速さ比較」に載せました。