以前、時刻を扱うエントリーではCalendarクラスとDateクラスを使いましたが、Java8で標準になったTimeAPIについて調べてみます。
Contents
現在時刻の出力
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
LocalDateTime localDateTime = LocalDateTime.now(); System.out.println(localDateTime); //2015-07-22T08:55:17.524 //日付け・時刻を分けることもできる LocalDate localDate = LocalDate.now(); System.out.println(localDate); //2015-07-22 LocalTime localTime = LocalTime.now(); System.out.println(localTime); //08:55:17.524 //時差考慮 OffsetDateTime offsetDateTime = OffsetDateTime.now(); System.out.println(offsetDateTime); //2015-07-22T09:02:12.686+09:00 //地域差考慮 ZonedDateTime zoneDateTime = ZonedDateTime.now(ZoneId.of("Asia/Tokyo")); System.out.println( zoneDateTime ); //2015-07-22T09:02:12.686+09:00[Asia/Tokyo] |
任意時間の出力
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
//任意の時間の出力 LocalDateTime localDateTime = LocalDateTime.of(1980, 5, 13, 12, 34, 56); System.out.println(localDateTime); //1980-05-13T12:34:56 //日付けのみ LocalDate localDate = LocalDate.of(1980, 5, 13); System.out.println(localDate); //1980-05-13 //設定方法その2 LocalDateTime localDateTime2 = LocalDateTime.now(); LocalDateTime result = localDateTime2.withYear(1980).withMonth(5).withDayOfMonth(13); System.out.println(result); //1980-05-13T09:13:51.346 |
年月日の取り出し
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//取り出し(任意の時間の出力はここを変更) LocalDateTime localDateTime = LocalDateTime.of(1980, 5, 13, 12, 34, 56); int year = localDateTime.getYear(); System.out.println(year); //1980 int month = localDateTime.getMonthValue(); System.out.println(month); //5 Month month2 = localDateTime.getMonth(); System.out.println(month2); //MAY int day = localDateTime.getYear(); System.out.println(day); //13 |
整形して出力
1 2 3 4 5 6 |
//取り出し(任意時間の場合は当然ここを修正) LocalDateTime localDateTime = LocalDateTime.now(); DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd"); String formattedDate = localDateTime.format(dateTimeFormatter); System.out.println(formattedDate); //2015/07/22 |
加算・減算
1 2 3 4 5 |
//取り出し (任意の時間の出力はここを変更) LocalDateTime localDateTime = LocalDateTime.now(); LocalDateTime result = localDateTime.minusYears(10).minusMonths(2); System.out.println(result); //2005-05-22T09:30:45.314 |
前後関係
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//取り出し LocalDate localDate = LocalDate.of(1980, 5, 13); LocalDate localDate2 = LocalDate.of(1981, 10, 10); //2つの時間が同一か? System.out.println(localDate.isEqual(localDate2)); //false //localDateはlocalDate2よりも過去か? System.out.println(localDate.isBefore(localDate2)); //true //localDateはlocalDate2よりも未来か? System.out.println(localDate.isAfter(localDate2)); //false |
2点間の間隔
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
//取り出し LocalDate localDate = LocalDate.of(1980, 5, 13); LocalDate localDate2 = LocalDate.of(1981, 10, 10); //2つの時間が同一か? Period period = Period.between(localDate, localDate2); int year = period.getYears(); System.out.println(period.getYears()); //1 int month = period.getMonths(); System.out.println(month); //4 int day = period.getDays(); System.out.println(day); //27 //任意時点での日付けの変更 //1年3ヵ月後の日付けを出力 Period period2 = Period.of(1,3,0); LocalDate localDate3 = localDate2.plus(period2); System.out.println(localDate3); //1983-01-10 |
Dateオブジェクトとの相互変換
1 2 3 4 5 6 7 8 9 |
//dateからTimeAPIの変換(ロケール情報が必要になります。) Date date = new Date(); Instant instant = date.toInstant(); ZonedDateTime localDate = ZonedDateTime.ofInstant(instant,ZoneId.systemDefault()); //TimeAPIからDate ZonedDateTime localDate2 = ZonedDateTime.now(); Instant instant2 = localDate2.toInstant(); Date date2 = Date.from(instant2); |
タイムスタンプなど(TimeAPIとは関係ありません。)
1 2 3 4 5 6 7 8 9 |
//現在時刻の出力 long now = System.currentTimeMillis(); System.out.println(now); //1437529017888 //DBのタイムスタンプ型の作成 Timestamp timestamp = new Timestamp(System.currentTimeMillis()); System.out.println(timestamp); //2015-07-22 10:36:57.888 |