LoginSignup
0
0

More than 3 years have passed since last update.

【Java】Calendarクラスで10日後の日付を取得

Posted at
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;
}

のイメージとは違うのかな。

またわかり次第記事を更新しますが、とりあえず上記のような理解ですっきりしましたし、扱いとして問題ありませんでした。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0