こんにちは。「Javaを復習する初心者」です。
今回もCalendarクラスを扱います。getメソッドで引数をCalendar.DATEにして実験しました。
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)メソッドを使う場面の方が多い気がします。