java.time.LocalDateTime
の利用サンプルです。
サンプルコードで試したのは以下の通りです。
現在日時の取得
■API
LocalDateTime#now
■サンプル
// 現在日付 LocalDateTime date1 = LocalDateTime.now(); System.out.println("date1 : " + date1);
■実行結果
date1 : 2016-09-14T06:29:39.437
特定の日時を指定してのインスタンス生成
■API
LocalDateTime#of
■サンプル
// 年・月・日・時・分を指定(2013/12/31 15:30) LocalDateTime date2 = LocalDateTime.of(2013, 12, 31, 15, 30); System.out.println("date2 : " + date2); // 年・月・日・時・分・秒を指定(2013/6/1 09:05:10) LocalDateTime date3 = LocalDateTime.of(2013, Month.JUNE, 1, 9, 5, 10); System.out.println("date3 : " + date3);
■実行結果
date2 : 2013-12-31T15:30 date3 : 2013-06-01T09:05:10
年・月・日・時・分・秒の個別取得
■API
LocalDateTime#getYear
LocalDateTime#getMonth
LocalDateTime#getDayOfMonth
LocalDateTime#getDayOfWeek
LocalDateTime#getHour
LocalDateTime#getMinute
LocalDateTime#getSecond
■サンプル
LocalDateTime date4 = LocalDateTime.of(2013, 1, 31, 23, 59, 1); System.out.println("date4 : "); System.out.println(" 年:" + date4.getYear()); System.out.println(" 月:" + date4.getMonth()); System.out.println(" 日:" + date4.getDayOfMonth()); System.out.println(" 曜日:" + date4.getDayOfWeek()); System.out.println(" 時:" + date4.getHour()); System.out.println(" 分:" + date4.getMinute()); System.out.println(" 秒:" + date4.getSecond());
■実行結果
date4 : 年:2013 月:JANUARY 日:31 曜日:THURSDAY 時:23 分:59 秒:1
加減算
■API
LocalDateTime#plusYears
LocalDateTime#plusMonths
LocalDateTime#plusDays
LocalDateTime#plusHours
LocalDateTime#plusMinutes
LocalDateTime#plusSeconds
LocalDateTime#minusYears
LocalDateTime#minusMonths
LocalDateTime#minusDays
LocalDateTime#minusHours
LocalDateTime#minusMinutes
LocalDateTime#minusSeconds
■サンプル
// 加減算してみる LocalDateTime date5 = LocalDateTime.of(2013, 1, 31, 23, 59, 1); System.out.println(date5 + "の1年後: " + date5.plusYears(1)); System.out.println(date5 + "の2ヶ月後: " + date5.plusMonths(2)); System.out.println(date5 + "の3日後: " + date5.plusDays(3)); System.out.println(date5 + "の4時間後: " + date5.plusHours(4)); System.out.println(date5 + "の5分後: " + date5.plusMinutes(5)); System.out.println(date5 + "の6秒後: " + date5.plusSeconds(6)); System.out.println(date5 + "の1年前: " + date5.minusYears(1)); System.out.println(date5 + "の2ヶ月前: " + date5.minusMonths(2)); System.out.println(date5 + "の3日前: " + date5.minusDays(3)); System.out.println(date5 + "の4時間前: " + date5.minusHours(4)); System.out.println(date5 + "の5分前: " + date5.minusMinutes(5)); System.out.println(date5 + "の6秒前: " + date5.minusSeconds(6)); // 期間を加減算してみる LocalDateTime date6 = LocalDateTime.of(2013, 1, 1, 23, 59, 1); // 3日間を加算・減算してみる System.out.println(date6 + "の3日後: " + date6.plus(Period.ofDays(3))); System.out.println(date6 + "の3日前: " + date6.minus(Period.ofDays(3))); // 3時間を加算・減算してみる System.out.println(date6 + "の3時間後: " + date6.plus(Duration.ofHours(3))); System.out.println(date6 + "の3時間前: " + date6.minus(Duration.ofHours(3)));
■実行結果
2013-01-31T23:59:01の1年後: 2014-01-31T23:59:01 2013-01-31T23:59:01の2ヶ月後: 2013-03-31T23:59:01 2013-01-31T23:59:01の3日後: 2013-02-03T23:59:01 2013-01-31T23:59:01の4時間後: 2013-02-01T03:59:01 2013-01-31T23:59:01の5分後: 2013-02-01T00:04:01 2013-01-31T23:59:01の6秒後: 2013-01-31T23:59:07 2013-01-31T23:59:01の1年前: 2012-01-31T23:59:01 2013-01-31T23:59:01の2ヶ月前: 2012-11-30T23:59:01 2013-01-31T23:59:01の3日前: 2013-01-28T23:59:01 2013-01-31T23:59:01の4時間前: 2013-01-31T19:59:01 2013-01-31T23:59:01の5分前: 2013-01-31T23:54:01 2013-01-31T23:59:01の6秒前: 2013-01-31T23:58:55 2013-01-01T23:59:01の3日後: 2013-01-04T23:59:01 2013-01-01T23:59:01の3日前: 2012-12-29T23:59:01 2013-01-01T23:59:01の3時間後: 2013-01-02T02:59:01 2013-01-01T23:59:01の3時間前: 2013-01-01T20:59:01
文字列からのparse
■API
LocalDateTime#parse
■サンプル
// 日付文字列からparseしてみる LocalDateTime date7 = LocalDateTime.parse("2013/07/01 12:34:55", DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss")); System.out.println("date7 : " + date7);
■実行結果
date7 : 2013-07-01T12:34:55
LocalDateTimeからLocalDate, LocalTimeの取得
■API
LocalDateTime#toLocalDate
LocalDateTime#toLocalTime
■サンプル
// LocalDateTimeからLocalDate、LocalTimeを取得 LocalDateTime date8 = LocalDateTime.of(2013, 1, 3, 10, 12, 20); System.out.println("date8 : " + date8); System.out.println("date8から取得したLocalDate : " + date8.toLocalDate()); System.out.println("date8から取得したLocalTime : " + date8.toLocalTime());
■実行結果
date8 : 2013-01-03T10:12:20 date8から取得したLocalDate : 2013-01-03 date8から取得したLocalTime : 10:12:20
LocalDateTimeの内容を更新する
■API
LocalDateTime#withYear
LocalDateTime#withDayOfMonth
LocalDateTime#withHour
LocalDateTime#withMinute
■サンプル
// LocalDateTimeの各日時の要素を置き換えて新しいLocalTimeDateを取得する LocalDateTime date9 = LocalDateTime.of(2013, 1, 3, 10, 12, 20); System.out.println("date9 : " + date9); System.out.println(date9 + " の年を2012に置き換え : " + date9.withYear(2012)); System.out.println(date9 + " の日を31に置き換え : " + date9.withDayOfMonth(31)); System.out.println(date9 + " の時を23に置き換え : " + date9.withHour(23)); System.out.println(date9 + " の分を0に置き換え : " + date9.withMinute(0));
■実行結果
date9 : 2013-01-03T10:12:20 2013-01-03T10:12:20 の年を2012に置き換え : 2012-01-03T10:12:20 2013-01-03T10:12:20 の日を31に置き換え : 2013-01-31T10:12:20 2013-01-03T10:12:20 の時を23に置き換え : 2013-01-03T23:12:20 2013-01-03T10:12:20 の分を0に置き換え : 2013-01-03T10:00:20
不正な日時の生成
■サンプル
// 存在しない2013年2月30日12時31分50秒とか指定するとDateTimeExceptionがスローされる try { LocalDateTime.of(2013, Month.FEBRUARY, 30, 12, 31, 50); } catch (DateTimeException e) { e.printStackTrace(); }
■実行結果
java.time.DateTimeException: Invalid date 'FEBRUARY 30' at java.time.LocalDate.create(LocalDate.java:431) at java.time.LocalDate.of(LocalDate.java:249) at sample.java8.Java8LocalDateClient.main(Java8LocalDateClient.java:59)
試したソースコードの全体は以下です。
import java.time.DateTimeException; import java.time.Duration; import java.time.LocalDateTime; import java.time.Month; import java.time.Period; import java.time.format.DateTimeFormatter; public class Java8LocalDateTimeClient { public static void main(String[] args) { // 現在日時 LocalDateTime date1 = LocalDateTime.now(); System.out.println("date1 : " + date1); // 年・月・日・時・分を指定(2013/12/31 15:30) LocalDateTime date2 = LocalDateTime.of(2013, 12, 31, 15, 30); System.out.println("date2 : " + date2); // 年・月・日・時・分・秒を指定(2013/6/1 09:05:10) LocalDateTime date3 = LocalDateTime.of(2013, Month.JUNE, 1, 9, 5, 10); System.out.println("date3 : " + date3); // 生成した日時の年・月・日・曜日を個別に取り出す LocalDateTime date4 = LocalDateTime.of(2013, 1, 31, 23, 59, 1); System.out.println("date4 : "); System.out.println(" 年:" + date4.getYear()); System.out.println(" 月:" + date4.getMonth()); System.out.println(" 日:" + date4.getDayOfMonth()); System.out.println(" 曜日:" + date4.getDayOfWeek()); System.out.println(" 時:" + date4.getHour()); System.out.println(" 分:" + date4.getMinute()); System.out.println(" 秒:" + date4.getSecond()); // 加減算してみる LocalDateTime date5 = LocalDateTime.of(2013, 1, 31, 23, 59, 1); System.out.println(date5 + "の1年後: " + date5.plusYears(1)); System.out.println(date5 + "の2ヶ月後: " + date5.plusMonths(2)); System.out.println(date5 + "の3日後: " + date5.plusDays(3)); System.out.println(date5 + "の4時間後: " + date5.plusHours(4)); System.out.println(date5 + "の5分後: " + date5.plusMinutes(5)); System.out.println(date5 + "の6秒後: " + date5.plusSeconds(6)); System.out.println(date5 + "の1年前: " + date5.minusYears(1)); System.out.println(date5 + "の2ヶ月前: " + date5.minusMonths(2)); System.out.println(date5 + "の3日前: " + date5.minusDays(3)); System.out.println(date5 + "の4時間前: " + date5.minusHours(4)); System.out.println(date5 + "の5分前: " + date5.minusMinutes(5)); System.out.println(date5 + "の6秒前: " + date5.minusSeconds(6)); // 期間を加減算してみる LocalDateTime date6 = LocalDateTime.of(2013, 1, 1, 23, 59, 1); // 3日間を加算・減算してみる System.out.println(date6 + "の3日後: " + date6.plus(Period.ofDays(3))); System.out.println(date6 + "の3日前: " + date6.minus(Period.ofDays(3))); // 3時間を加算・減算してみる System.out.println(date6 + "の3時間後: " + date6.plus(Duration.ofHours(3))); System.out.println(date6 + "の3時間前: " + date6.minus(Duration.ofHours(3))); // 日付文字列からparseしてみる LocalDateTime date7 = LocalDateTime.parse("2013/07/01 12:34:55", DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss")); System.out.println("date7 : " + date7); // LocalDateTimeからLocalDate、LocalTimeを取得 LocalDateTime date8 = LocalDateTime.of(2013, 1, 3, 10, 12, 20); System.out.println("date8 : " + date8); System.out.println("date8から取得したLocalDate : " + date8.toLocalDate()); System.out.println("date8から取得したLocalTime : " + date8.toLocalTime()); // LocalDateTimeの各日時の要素を置き換えて新しいLocalTimeDateを取得する LocalDateTime date9 = LocalDateTime.of(2013, 1, 3, 10, 12, 20); System.out.println("date9 : " + date9); System.out.println(date9 + " の年を2012に置き換え : " + date9.withYear(2012)); System.out.println(date9 + " の日を31に置き換え : " + date9.withDayOfMonth(31)); System.out.println(date9 + " の時を23に置き換え : " + date9.withHour(23)); System.out.println(date9 + " の分を0に置き換え : " + date9.withMinute(0)); System.out.println("###"); // 存在しない2013年2月30日12時31分50秒とか指定するとDateTimeExceptionがスローされる // (DateTimeExceptionは実行時例外なのも今っぽい気がします) try { LocalDateTime.of(2013, Month.FEBRUARY, 30, 12, 31, 50); } catch (DateTimeException e) { e.printStackTrace(); } } }
関連エントリ