java-beginner.com ブログ

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

Calendarで日の情報を取得

投稿日:

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

アイキャッチ

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

適切なタイトルが思いつきませんでしたが、今回はCalendar#getメソッドでCalendar.DAY_OF_XXXを引数にして結果を表示させてみました。

Calendar.DAY_OF_XXX

API仕様書で調べた結果、Calendar.DAY_OF_XXXは以下の通りです。

DAY_OF_MONTH
○日の○を表示
DAY_OF_WEEK
数値で曜日が返却されます。この数値は以下のクラス変数で定義されてます。

  • SUNDAY
  • MONDAY
  • TUESDAY
  • WEDNESDAY
  • THURSDAY
  • FRIDAY
  • SATURDAY
DAY_OF_WEEK_IN_MONTH
○月の中で何度目の曜日か返却されます。○はCalendarのインスタンスに設定されている月。
DAY_OF_YEAR
○年の中で何日目か返却されます。○はCalendarのインスタンスに設定されている年。

2016年1月1日から10日

今回は2016年1月1日から10日までを表示させてみました。

ソースコード

package calendarTest;

import java.util.Calendar;

public class HeloGetDay {

    public static void main(String[] args) {

        Calendar c = Calendar.getInstance();
        c.clear();

        // 2016年1月1日から10日
        for (int i = 1; i <= 10; i++) {
            c.set(2016, 1 - 1, i);
            System.out.println(c.getTime());
            test(c);
            System.out.println();
        }

    }

    private static void test(Calendar c) {

        System.out.println(c.get(Calendar.DAY_OF_MONTH)  + "日です。");
        System.out.println(transFrom(c.get(Calendar.DAY_OF_WEEK)) + "です。");
        System.out.println("上記曜日は今月" + c.get(Calendar.DAY_OF_WEEK_IN_MONTH) + "度目です。");
        System.out.println("今年" + c.get(Calendar.DAY_OF_YEAR) + "日目です。");

    }

    private static String transFrom(int key) {
        String s = "";

        switch (key) {
        case Calendar.SUNDAY:
            s = "日曜日";
            break;
        case Calendar.MONDAY:
            s = "月曜日";
            break;
        case Calendar.TUESDAY:
            s = "火曜日";
            break;
        case Calendar.WEDNESDAY:
            s = "水曜日";
            break;
        case Calendar.THURSDAY:
            s = "木曜日";
            break;
        case Calendar.FRIDAY:
            s = "金曜日";
            break;
        case Calendar.SATURDAY:
            s = "土曜日";
            break;

        default:
            break;
        }

        return s;
    }

}

結果

Fri Jan 01 00:00:00 JST 2016
1日です。
金曜日です。
上記曜日は今月1度目です。
今年1日目です。

Sat Jan 02 00:00:00 JST 2016
2日です。
土曜日です。
上記曜日は今月1度目です。
今年2日目です。

Sun Jan 03 00:00:00 JST 2016
3日です。
日曜日です。
上記曜日は今月1度目です。
今年3日目です。

Mon Jan 04 00:00:00 JST 2016
4日です。
月曜日です。
上記曜日は今月1度目です。
今年4日目です。

Tue Jan 05 00:00:00 JST 2016
5日です。
火曜日です。
上記曜日は今月1度目です。
今年5日目です。

Wed Jan 06 00:00:00 JST 2016
6日です。
水曜日です。
上記曜日は今月1度目です。
今年6日目です。

Thu Jan 07 00:00:00 JST 2016
7日です。
木曜日です。
上記曜日は今月1度目です。
今年7日目です。

Fri Jan 08 00:00:00 JST 2016
8日です。
金曜日です。
上記曜日は今月2度目です。
今年8日目です。

Sat Jan 09 00:00:00 JST 2016
9日です。
土曜日です。
上記曜日は今月2度目です。
今年9日目です。

Sun Jan 10 00:00:00 JST 2016
10日です。
日曜日です。
上記曜日は今月2度目です。
今年10日目です。

上記はset(int year, int month, int date)で日付を設定しているので出力結果はほぼ設定値からわかります。面白いと思ったのは曜日がその年月の何度目なのかを出力できることです。

曜日がその月の5回目

以下、曜日がその月の5回目である場合を2016年で調べました。add(int field, int amount) メソッドを使って1日加算する処理をループさせてます。

ソース

package calendarTest;

import java.util.Calendar;

public class HeloGetDayAdd {

    public static void main(String[] args) {

        Calendar c = Calendar.getInstance();
        c.clear();
        c.set(2016, 1 - 1, 1);

        int i = 0;
        do {
            if (c.get(Calendar.DAY_OF_WEEK_IN_MONTH) == 5) {
                System.out.println(c.getTime());
            }
            c.add(Calendar.DATE, 1);
            i++;
        } while (i < 366);

    }


}

結果

Fri Jan 29 00:00:00 JST 2016
Sat Jan 30 00:00:00 JST 2016
Sun Jan 31 00:00:00 JST 2016
Mon Feb 29 00:00:00 JST 2016
Tue Mar 29 00:00:00 JST 2016
Wed Mar 30 00:00:00 JST 2016
Thu Mar 31 00:00:00 JST 2016
Fri Apr 29 00:00:00 JST 2016
Sat Apr 30 00:00:00 JST 2016
Sun May 29 00:00:00 JST 2016
Mon May 30 00:00:00 JST 2016
Tue May 31 00:00:00 JST 2016
Wed Jun 29 00:00:00 JST 2016
Thu Jun 30 00:00:00 JST 2016
Fri Jul 29 00:00:00 JST 2016
Sat Jul 30 00:00:00 JST 2016
Sun Jul 31 00:00:00 JST 2016
Mon Aug 29 00:00:00 JST 2016
Tue Aug 30 00:00:00 JST 2016
Wed Aug 31 00:00:00 JST 2016
Thu Sep 29 00:00:00 JST 2016
Fri Sep 30 00:00:00 JST 2016
Sat Oct 29 00:00:00 JST 2016
Sun Oct 30 00:00:00 JST 2016
Mon Oct 31 00:00:00 JST 2016
Tue Nov 29 00:00:00 JST 2016
Wed Nov 30 00:00:00 JST 2016
Thu Dec 29 00:00:00 JST 2016
Fri Dec 30 00:00:00 JST 2016
Sat Dec 31 00:00:00 JST 2016

ちょうど30日ありました。2016年はうるう年で2月29日が登場してます。