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

Calendarで日を取得

こんにちは。「Javaを復習する初心者」です。今回もCalendarクラスを扱います。getメソッドで引数をCalendar.DATEにして実験しました。

ソースを見るとDATEは「public final static int DATE = 5;」と定義されてますが、この数値自体は意識する必要ありません。API仕様書には日を示すフィールド値とありますのでget(Calendar.DATE)と記述すれば、Calendarクラスのインスタンスが保持している日が取得できます。

今回のプログラムは前半と後半があります。前半では1970年1月で実験してます。月が変わっても日が取得できることを確認しました。後半では2016年2月と2017年2月で月末の様子を調べました。2016年がうるう年です。前半、後半どちらもsetTimeInMillisで日付を設定しています。

プログラム

以下はソースと実行結果です。

package calendarTest;

import java.util.Calendar;

public class HeloGetDate {

    public static void main(String[] args) {

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

        System.out.println("--------------------");
        System.out.println("前半");
        System.out.println("--------------------");

        System.out.println(c.getTime());
        System.out.println(c.get(Calendar.DATE));

        c.setTimeInMillis(1000L * 60L * 60L * 15L);
        System.out.println(c.getTime());
        System.out.println(c.get(Calendar.DATE));

        c.setTimeInMillis(1000L * 60L * 60L * 15L + 1000L * 60L * 60L * 24L);
        System.out.println(c.getTime());
        System.out.println(c.get(Calendar.DATE));

        c.setTimeInMillis(1000L * 60L * 60L * 15L + 1000L * 60L * 60L * 24L * 29L);
        System.out.println(c.getTime());
        System.out.println(c.get(Calendar.DATE));

        c.setTimeInMillis(1000L * 60L * 60L * 15L + 1000L * 60L * 60L * 24L * 30L);
        System.out.println(c.getTime());
        System.out.println(c.get(Calendar.DATE));

        System.out.println("--------------------");
        System.out.println("後半");
        System.out.println("--------------------");

        long timeInMillis20160201 = 1454252400000L;
        long timeInMillis20170201 = 1485874800000L;

        c.setTimeInMillis(timeInMillis20160201 + 1000L * 60L * 60L * 24L * 27L);
        System.out.println(c.getTime());
        System.out.println(c.get(Calendar.DATE));

        c.setTimeInMillis(timeInMillis20160201 + 1000L * 60L * 60L * 24L * 28L);
        System.out.println(c.getTime());
        System.out.println(c.get(Calendar.DATE));

        c.setTimeInMillis(timeInMillis20170201 + 1000L * 60L * 60L * 24L * 27L);
        System.out.println(c.getTime());
        System.out.println(c.get(Calendar.DATE));

        c.setTimeInMillis(timeInMillis20170201 + 1000L * 60L * 60L * 24L * 28L);
        System.out.println(c.getTime());
        System.out.println(c.get(Calendar.DATE));

    }

}
--------------------
前半
--------------------
Thu Jan 01 00:00:00 JST 1970
1
Fri Jan 02 00:00:00 JST 1970
2
Sat Jan 03 00:00:00 JST 1970
3
Sat Jan 31 00:00:00 JST 1970
31
Sun Feb 01 00:00:00 JST 1970
1
--------------------
後半
--------------------
Sun Feb 28 00:00:00 JST 2016
28
Mon Feb 29 00:00:00 JST 2016
29
Tue Feb 28 00:00:00 JST 2017
28
Wed Mar 01 00:00:00 JST 2017
1

解説

プログラム後半では突然long型変数使ってますが、あらかじめミリ秒を調べました。このミリ秒はどのように調べたかというと、set(int year, int month, int date)メソッドで年月日を設定し、getTimeInMillis()メソッドでミリ秒を取得し、コンソールに出力して確認しました。上記プログラムではsetTimeInMillisばかり使ってますが、set(int year, int month, int date)メソッドを使う場面の方が多い気がします。