TenDaysCalendar.java
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class TenDaysCalendar {
public static void main(String[] args) {
// 現在の日付情報を取得
Date now = new Date();
// Calendarにセット
Calendar c = Calendar.getInstance(); // Calendarはnewを使わない
c.setTime(now); // 引数にはDate型
// 日付を表示してみる
System.out.println("***********現在日時***********");
System.out.println("Calendar.DATE: " + Calendar.DATE); // 5
System.out.println("c.get(Calendar.DATE): " + c.get(Calendar.DATE)); // 今日の日付
// 表示形式を指定して出力
SimpleDateFormat f = new SimpleDateFormat("yyyy年MM月dd日"); // 表示形式を指定
// 日付に10加算して10日後の日付を取得したい
c.add(Calendar.DATE, 10);
System.out.println();
System.out.println("***********10日後***********");
System.out.println("10日後の年月日: " + f.format(c.getTime()));
System.out.println("Calendar.DATE: " + Calendar.DATE); // 5
System.out.println("c.get(Calendar.DATE): " + c.get(Calendar.DATE));
// さらに10日後の日付をセットして取得してみる
System.out.println();
System.out.println("***********さらに10日後***********");
System.out.println("c.set(Calendar.DATE, (Calendar.DATE + 10))として10日後の日付にしようと試みる");
c.set(Calendar.DATE, (Calendar.DATE + 10));
System.out.println("10日後の年月日: " + f.format(c.getTime()));
System.out.println("Calendar.DATEは定数で5なので、10加算すると15日になる");
System.out.println();
System.out.println("c.set(Calendar.DATE, (c.get(Calendar.DATE) + 10))として10日後の日付にしようと試みる");
c.set(Calendar.DATE, (c.get(5) + 10));
System.out.println("10日後の年月日: " + f.format(c.getTime()));
System.out.println("上でDATEが15日にセットされたので10を加算して25日になる");
}
}
実行結果
***********現在日時***********
Calendar.DATE: 5
c.get(Calendar.DATE): 11
***********10日後***********
10日後の年月日: 2020年10月21日
Calendar.DATE: 5
c.get(Calendar.DATE): 21
***********さらに10日後***********
c.set(Calendar.DATE, (Calendar.DATE + 10))として10日後の日付にしようと試みる
10日後の年月日: 2020年10月15日
Calendar.DATEは定数で5なので、10加算すると15日になる
c.set(Calendar.DATE, (c.get(Calendar.DATE) + 10))として10日後の日付にしようと試みる
10日後の年月日: 2020年10月13日
上でDATEが15日にセットされたので10を加算して25日になる
#Calendar.DATEはfinal定数だから変更できない
finalなのになんでsetとかできるの?
これが全然理解できませんでした。というか今もよく理解できていません。とりあえずいろいろ検証してみた結果、定数フィールド値というものがあって
Calendar.DATEは定数5
が格納されているよう。
#getをすると日付が取得できる
c.get(Calendar.DATE);
とすると日付がちゃんと取得できる。どういうこと?って感じでした。
とりあえず、Calendar.DATEは定数5なので、
c.get(5);
として日付が取得できました。
#日付情報はDATEじゃなくて他のところに格納されている?!
ちょっと調べてみましたが私にはわかりませんでしたが、getの引数に5を渡すと、
DATEの定数値が来たぞ!日付を返さなきゃ!
ということで、別のところに入っている日付を取ってきてくれるというイメージで良いかと。
基礎でやるような
int name = "tanaka";
getName(){
return name;
}
のイメージとは違うのかな。
またわかり次第記事を更新しますが、とりあえず上記のような理解ですっきりしましたし、扱いとして問題ありませんでした。