Java基礎ー日付関連クラス

日付関連クラス

1. DateとCalendar

Java8まで使用されてきた日付クラス。
Dateクラスは日付操作するメソッドを持たない(あっても非推奨)なので、日付の操作はCalendarクラスで行う。
Dateクラスでは、Date⇔文字列の相互変換を行う。

Date date = new Date();
DateFormat format = new SimpleDateFormat("yyyy.MM.dd");
System.out.println(format.format(date));

Date date2 = format.parse("2018.06.30");
System.out.println(date2);

Calendar calendar = Calendar.getInstance();
calendar.setTime(date2); // Dateの日付がCalendarに設定される
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, 2020); // 年を2020に設定する
calendar.add(Calendar.YEAR, 3); // 年に+3する
calendar.get(Calendar.YEAR); // 年を取得
Date time = calendar.getTime(); // CalendarからDateへの変換

2. 日付API

クラス名 説明
LocalDateTime タイムゾーンのない日時 2020-3-30T13:30:30.999
ZonedDateTime タイムゾーン付きの日時 2020-3-30T13:30:30.999+09:00[Asia/Tokyo]
OffsetDateTime オフセット付きの日時 2020-3-30T13:30:59.999+09:00
DateTimeFormatter 日付・時刻の文字列出力、解析を行う -

LocalTime, LocalDateクラスもある

// 現在日時の取得
LocalDateTime d = LocalDateTime.now();

//インスタンスの生成。年月日時分秒を指定する
LocalDateTime d1 = LocalDateTime.of(2020, 3, 30, 13, 30, 30);
// 1秒未満のナノ秒も指定できる
LocalDateTime d2 = LocalDateTime.of(2020, 3, 30, 13, 30, 30, 999999999);

//フィールドの取得。上から年、月、日、時間、分、秒、ナノ秒
d.getYear();
d.getMonth();
d.getDayOfMonth();
d.getHour();
d.getMinute();
d.getSecond();
d.getNano();
d.get(ChronoField.YEAR);

//値の変更
d1.plusDays(20);       //2020-04-19T13:30:30
d1.minusDays(20);      //2020-3-10T13:30:30
d1.withDayOfMonth(20); //2020-3-20T13:30:30

//時間の切り捨て
d2.truncatedTo(ChronoUnit.HOURS); //2020/3/30T 13:00

//フォーマッター
DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
LocalDateTime d = LocalDateTime.parse("2020/3/30 13:30:30", f);
System.out.println(d.format(f));

//和暦の表示
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("Gppy年ppM月ppd日")
                           .withLocale(Locale.JAPANESE)
                           .withResolverStyle(ResolverStyle.STRICT)
                           .withChronology(JapaneseChronology.INSTANCE);
JapaneseDate japaneseDate = JapaneseDate.of(2000, 1, 1);
System.out.println(formatter.format(japaneseDate)); // 平成12年1月1日