日付関連クラス
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日