Java 日時APIについて
日時APIについて調べてみた
・日時クラス
// LocalDateTime タイムゾーンなし System.out.println(LocalDateTime.now()); // ex 2019-04-12T23:41:14.816 // ZonedDateTime タイムゾーン付き System.out.println(ZonedDateTime.now()); // ex 2019-04-12T23:42:07.975+09:00[GMT+09:00] // OffsetDateTime オフセット付き System.out.println(OffsetDateTime.now()); // ex 2019-04-12T23:42:36.609+09:00
・インスタンス生成
// now 現在日時 System.out.println(LocalDateTime.now()); // of System.out.println(LocalDateTime.of(9999, 12, 31, 23, 59, 59, 999999999)); // ex 9999-12-31T23:59:59.999999999
・日時クラス間の変換
// atZone System.out.println(LocalDateTime.now().atZone(ZoneOffset.systemDefault())); // atOffset System.out.println(LocalDateTime.now().atOffset(ZoneOffset.ofHours(9))); // toInstant System.out.println(LocalDateTime.now().toInstant(ZoneOffset.ofHours(9))); // LocalDate System.out.println(LocalDateTime.now().toLocalDate()); // ex 2019-04-12 // LocalTime System.out.println(LocalDateTime.now().toLocalTime()); // 23:45:02.682 // ofInstant Date date = new Date(); System.out.println(LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault())); // from System.out.println(LocalDateTime.from(ZonedDateTime.now())); System.out.println(LocalDateTime.from(OffsetDateTime.now()));
・日時クラスのパラメータ
// ZoneId System.out.println(ZoneId.of("Asia/Tokyo")); System.out.println(ZoneId.systemDefault()); // ex GMT+09:00 // ZoneOffset System.out.println(ZoneOffset.ofHours(9)); // isSupported ChronoField フィールドの標準セット System.out.println(LocalDateTime.now().isSupported(ChronoField.YEAR)); System.out.println(LocalDateTime.now().isSupported(ChronoField.MONTH_OF_YEAR)); System.out.println(LocalDateTime.now().isSupported(ChronoField.DAY_OF_MONTH)); System.out.println(LocalDateTime.now().isSupported(ChronoField.HOUR_OF_DAY)); System.out.println(LocalDateTime.now().isSupported(ChronoField.MINUTE_OF_HOUR)); System.out.println(LocalDateTime.now().isSupported(ChronoField.SECOND_OF_MINUTE)); System.out.println(LocalDateTime.now().isSupported(ChronoField.NANO_OF_SECOND)); System.out.println(LocalDateTime.now().isSupported(ChronoField.DAY_OF_WEEK)); // range System.out.println(LocalDateTime.now().range(ChronoField.YEAR)); // -999999999 - 999999999 System.out.println(LocalDateTime.now().range(ChronoField.MONTH_OF_YEAR)); // 1 - 12 System.out.println(LocalDateTime.now().range(ChronoField.DAY_OF_MONTH)); // 1 - 30(31では?) System.out.println(LocalDateTime.now().range(ChronoField.HOUR_OF_DAY)); // 0 - 23 System.out.println(LocalDateTime.now().range(ChronoField.MINUTE_OF_HOUR)); // 0 - 59 System.out.println(LocalDateTime.now().range(ChronoField.SECOND_OF_MINUTE)); // 0 - 59 System.out.println(LocalDateTime.now().range(ChronoField.NANO_OF_SECOND)); // 0 - 999999999 System.out.println(LocalDateTime.now().range(ChronoField.DAY_OF_WEEK)); // 1 - 7 // isSupported ChronoUnit 日時期間の単位の標準セット System.out.println(LocalDateTime.now().isSupported(ChronoUnit.YEARS)); System.out.println(LocalDateTime.now().isSupported(ChronoUnit.MONTHS)); System.out.println(LocalDateTime.now().isSupported(ChronoUnit.DAYS)); System.out.println(LocalDateTime.now().isSupported(ChronoUnit.HOURS)); System.out.println(LocalDateTime.now().isSupported(ChronoUnit.MINUTES)); System.out.println(LocalDateTime.now().isSupported(ChronoUnit.SECONDS)); System.out.println(LocalDateTime.now().isSupported(ChronoUnit.NANOS)); System.out.println(LocalDateTime.now().isSupported(ChronoUnit.WEEKS));
・値の取得
System.out.println(LocalDateTime.now().getYear()); System.out.println(LocalDateTime.now().getMonth());//ex APRIL System.out.println(LocalDateTime.now().getMonthValue()); // 1-12 System.out.println(LocalDateTime.now().getDayOfMonth()); System.out.println(LocalDateTime.now().getHour()); System.out.println(LocalDateTime.now().getMinute()); System.out.println(LocalDateTime.now().getSecond()); System.out.println(LocalDateTime.now().getNano()); System.out.println(LocalDateTime.now().getDayOfWeek()); System.out.println(LocalDateTime.now().getDayOfYear()); // 1-365 // get/getLong フィールド指定 System.out.println(LocalDateTime.now().get(ChronoField.YEAR)); // int System.out.println(LocalDateTime.now().getLong(ChronoField.YEAR)); // long // format フォーマット指定 System.out.println(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy"))); // truncatedTo 切り捨て指定、指定したunitまで取得 System.out.println(LocalDateTime.now().truncatedTo(ChronoUnit.DAYS)); // until LocalDateTime tomorrow = LocalDateTime.now().plusDays(1); System.out.println(LocalDateTime.now().until(tomorrow, ChronoUnit.DAYS)); // 1
・比較
// compareTo ※エポック比較ではない LocalDateTime now = LocalDateTime.now(); System.out.println(tomorrow.compareTo(now)); // 1 System.out.println(now.compareTo(tomorrow)); // -1 System.out.println(now.compareTo(now)); // 0 // equals ※エポック比較ではない // 属性判定 System.out.println(now.equals(now)); // true System.out.println(tomorrow.equals(now)); // false // isAfter // エポック比較 System.out.println(tomorrow.isAfter(now)); // true System.out.println(now.isAfter(tomorrow)); // false // isBefore // エポック比較 System.out.println(now.isBefore(tomorrow)); // true System.out.println(tomorrow.isBefore(now)); // false // isEqual // エポック比較 System.out.println(now.isEqual(now)); // true System.out.println(tomorrow.isBefore(now)); // false
・編集
// plus System.out.println(LocalDateTime.now().plusDays(1)); // minus System.out.println(LocalDateTime.now().minusDays(1)); // with(set) System.out.println(LocalDateTime.now().withDayOfMonth(1));