Java6やJava7で開発しなければならない状況でも、Java8で提供されているJSR-310(java.timeパッケージ)による日時操作をしたい場合があります。
そんな時は、ThreeTen Backportのお世話になりましょう。
「ThreeTen Backport」は、Java6, Java7向けにdate-time機能をバックポートしたものです。
■ライブラリの入手
Mavenの場合は、pom.xmlに以下を追加
<dependency> <groupId>org.threeten</groupId> <artifactId>threetenbp</artifactId> <version>1.3.2</version> </dependency>
jarを直接ダウンロードする場合はMaven Central Repositoryから直接持ってきましょう https://search.maven.org/remotecontent?filepath=org/threeten/threetenbp/1.3.6/threetenbp-1.3.6.jar
以下利用サンプルです
org.threeten.bp.LocalDate
サンプルコードで試したのは以下の通りです。
現在日付の取得
■API
LocalDate#now
■サンプル
// 現在日付 LocalDate date1 = LocalDate.now(); // 現在日付がyyyy-MM-dd 形式で出力される System.out.println("date1 : " + date1);
■実行結果
date1 : 2016-09-30
特定の日付を指定してのインスタンス生成
■API
LocalDate#of
■サンプル
// 年月日を全て数値で指定(月をそのままの数値で指定できるの良いね(ex. 12月なら12と指定)) LocalDate date2 = LocalDate.of(2013, 12, 31); // 2013-12-31 と出力される System.out.println("date2 : " + date2); // Monthを用いて指定 LocalDate date3 = LocalDate.of(2013, Month.JUNE, 1); // 2013-06-01 と出力される System.out.println("date3 : " + date3);
■実行結果
date2 : 2013-12-31 date3 : 2013-06-01
年・月・日・曜日の個別取得
■API
LocalDate#getYear
LocalDate#getMonth
LocalDate#getDayOfMonth
LocalDate#getDayOfWeek
■サンプル
// 2013-01-31を生成 LocalDate date4 = LocalDate.of(2013, 1, 31); System.out.println("date4 : "); // 年・月・日・曜日を個別に取り出す System.out.println(" 年:" + date4.getYear()); System.out.println(" 月:" + date4.getMonth()); System.out.println(" 日:" + date4.getDayOfMonth()); System.out.println(" 曜日:" + date4.getDayOfWeek());
■実行結果
date4 : 年:2013 月:JANUARY 日:31 曜日:THURSDAY
加減算
■API
LocalDate#plusDays
LocalDate#minusDays
■サンプル
// 加減算してみる(以下例は日の加減算ですが、月、年用のメソッドもあります) LocalDate date5 = LocalDate.of(2013, 1, 31); System.out.println(date5 + "の1日後: " + date5.plusDays(1)); System.out.println(date5 + "の40日後: " + date5.plusDays(40)); System.out.println(date5 + "の1日前: " + date5.minusDays(1)); System.out.println(date5 + "の40日前: " + date5.minusDays(40)); LocalDate date6 = LocalDate.of(2013, 1, 1); // 7日間を加算してみる(Durationを引数に指定するとDateTimeExceptionが発生します) System.out.println(date6 + "の7日後: " + date6.plus(Period.ofDays(7))); // 7日間を減算してみる(Durationを引数に指定するとDateTimeExceptionが発生します) System.out.println(date6 + "の7日前: " + date6.minus(Period.ofDays(7)));
■実行結果
2013-01-31の1日後: 2013-02-01 2013-01-31の40日後: 2013-03-12 2013-01-31の1日前: 2013-01-30 2013-01-31の40日前: 2012-12-22 2013-01-01の7日後: 2013-01-08 2013-01-01の7日前: 2012-12-25
文字列からのparse
■API
LocalDate#parse
■サンプル
// 日付文字列からparseしてみる LocalDate date7 = LocalDate.parse("2013/07/07", DateTimeFormatter.ofPattern("yyyy/MM/dd")); System.out.println("date7 : " + date7);
■実行結果
date7 : 2013-07-07
不正な日付の生成
■サンプル
// 存在しない2013年2月30日とか指定するとDateTimeExceptionがスローされる // (DateTimeExceptionは実行時例外なのも今っぽい気がします) try { LocalDate.of(2013, Month.FEBRUARY, 30); } catch (DateTimeException e) { e.printStackTrace(); }
■実行結果
org.threeten.bp.DateTimeException: Invalid date 'FEBRUARY 30' at org.threeten.bp.LocalDate.create(LocalDate.java:385) at org.threeten.bp.LocalDate.of(LocalDate.java:220) at sample.threeten.LocalDateClient.main(LocalDateClient.java:58)
試したソースコードの全体は以下です。
import org.threeten.bp.DateTimeException; import org.threeten.bp.LocalDate; import org.threeten.bp.Month; import org.threeten.bp.Period; import org.threeten.bp.format.DateTimeFormatter; public class LocalDateClient { public static void main(String[] args) { // 現在日付 LocalDate date1 = LocalDate.now(); // 現在日付がyyyy-MM-dd 形式で出力される System.out.println("date1 : " + date1); // 年月日を全て数値で指定(月をそのままの数値で指定できるの良いね(ex. 12月なら12と指定)) LocalDate date2 = LocalDate.of(2013, 12, 31); // 2013-12-31 と出力される System.out.println("date2 : " + date2); // Monthを用いて指定 LocalDate date3 = LocalDate.of(2013, Month.JUNE, 1); // 2013-06-01 と出力される System.out.println("date3 : " + date3); // 2013-01-31を生成 LocalDate date4 = LocalDate.of(2013, 1, 31); System.out.println("date4 : "); // 年・月・日・曜日を個別に取り出す System.out.println(" 年:" + date4.getYear()); System.out.println(" 月:" + date4.getMonth()); System.out.println(" 日:" + date4.getDayOfMonth()); System.out.println(" 曜日:" + date4.getDayOfWeek()); // 加減算してみる(以下例は日の加減算ですが、月、年用のメソッドもあります) LocalDate date5 = LocalDate.of(2013, 1, 31); System.out.println(date5 + "の1日後: " + date5.plusDays(1)); System.out.println(date5 + "の40日後: " + date5.plusDays(40)); System.out.println(date5 + "の1日前: " + date5.minusDays(1)); System.out.println(date5 + "の40日前: " + date5.minusDays(40)); LocalDate date6 = LocalDate.of(2013, 1, 1); // 7日間を加算してみる(Durationを引数に指定するとDateTimeExceptionが発生します) System.out.println(date6 + "の7日後: " + date6.plus(Period.ofDays(7))); // 7日間を減算してみる(Durationを引数に指定するとDateTimeExceptionが発生します) System.out.println(date6 + "の7日前: " + date6.minus(Period.ofDays(7))); // 日付文字列からparseしてみる LocalDate date7 = LocalDate.parse("2013/07/07", DateTimeFormatter.ofPattern("yyyy/MM/dd")); System.out.println("date7 : " + date7); System.out.println("###"); // 存在しない2013年2月30日とか指定するとDateTimeExceptionがスローされる // (DateTimeExceptionは実行時例外なのも今っぽい気がします) try { LocalDate.of(2013, Month.FEBRUARY, 30); } catch (DateTimeException e) { e.printStackTrace(); } } }
org.threeten.bp.LocalTime
サンプルコードで試したのは以下の通りです。
現在時刻の取得
■API
LocalTime#now
■サンプル
LocalTime time1 = LocalTime.now();
System.out.println("time1 : " + time1);
■実行結果
time1 : 10:30:13.779
特定の時刻を指定してインスタンス生成
■API
LocalTime#of
■サンプル
// 時・分を指定(23時59分) LocalTime time2 = LocalTime.of(23, 59); System.out.println("time2 : " + time2); // 時・分・秒を指定(0時1分2秒) LocalTime time3 = LocalTime.of(0, 1, 2); System.out.println("time3 : " + time3); // 時・分・秒・ナノ秒指定(23時59分59秒10ナノ秒) LocalTime time4 = LocalTime.of(23, 59, 59, 59); System.out.println("time4 : " + time4);
■実行結果
time2 : 23:59 time3 : 00:01:02 time4 : 23:59:59.000000059
時・分・秒の個別取得
■API
LocalTime#getHour
LocalTime#getMinute
LocalTime#getSecond
LocalTime#getNano
■サンプル
// 12時30分20秒を生成 LocalTime time5 = LocalTime.of(12, 30, 20); System.out.println("time5 : "); // 時・分・秒・ナノ秒を個別に取り出す System.out.println(" 時:" + time5.getHour()); System.out.println(" 分:" + time5.getMinute()); System.out.println(" 秒:" + time5.getSecond()); System.out.println(" ナノ秒:" + time5.getNano());
■実行結果
time5 : 時:12 分:30 秒:20 ナノ秒:0
加減算
■API
LocalTime#plusSeconds
LocalTime#plusMinutes
LocalTime#plusHours
LocalTime#minusSeconds
LocalTime#minusMinutes
LocalTime#minusHours
LocalTime#plus(Duration)
LocalTime#minus(Duration)
■サンプル
// 秒・分・時間を加減算してみる LocalTime time6 = LocalTime.of(12, 30, 20); System.out.println(time6 + "の10秒後: " + time6.plusSeconds(10)); System.out.println(time6 + "の30分後: " + time6.plusMinutes(30)); System.out.println(time6 + "の1時間後: " + time6.plusHours(1)); System.out.println(time6 + "の30秒前: " + time5.minusSeconds(30)); System.out.println(time6 + "の3分前: " + time5.minusMinutes(3)); System.out.println(time6 + "の13時間前: " + time5.minusHours(13)); LocalTime time7 = LocalTime.of(11, 22, 33); // 7分間を加算・減算してみる System.out.println(time7 + "の7分後: " + time7.plus(Duration.ofMinutes(7))); System.out.println(time7 + "の7分前: " + time7.minus(Duration.ofMinutes(7)));
■実行結果
12:30:20の10秒後: 12:30:30 12:30:20の30分後: 13:00:20 12:30:20の1時間後: 13:30:20 12:30:20の30秒前: 12:29:50 12:30:20の3分前: 12:27:20 12:30:20の13時間前: 23:30:20 11:22:33の7分後: 11:29:33 11:22:33の7分前: 11:15:33
文字列からのparse
■API
LocalTime#parse
■サンプル
// 時刻文字列からparseしてみる LocalTime time8 = LocalTime.parse("12:34:56", DateTimeFormatter.ofPattern("HH:mm:ss")); System.out.println("time8 : " + time8);
■実行結果
time8 : 12:34:56
不正な時刻の生成
■サンプル
// 存在しない23時61分0秒とか指定するとDateTimeExceptionがスローされる try { LocalTime.of(23, 61, 0); } catch (DateTimeException e) { e.printStackTrace(); }
■実行結果
org.threeten.bp.DateTimeException: Invalid value for MinuteOfHour (valid values 0 - 59): 61 at org.threeten.bp.temporal.ValueRange.checkValidValue(ValueRange.java:278) at org.threeten.bp.temporal.ChronoField.checkValidValue(ChronoField.java:557) at org.threeten.bp.LocalTime.of(LocalTime.java:299) at sample.threeten.LocalTimeClient.main(LocalTimeClient.java:59)
試したソースコードの全体は以下です。
import org.threeten.bp.DateTimeException; import org.threeten.bp.Duration; import org.threeten.bp.LocalTime; import org.threeten.bp.format.DateTimeFormatter; public class LocalTimeClient { public static void main(String[] args) { // 現在時刻 LocalTime time1 = LocalTime.now(); System.out.println("time1 : " + time1); // 時・分を指定(23時59分) LocalTime time2 = LocalTime.of(23, 59); System.out.println("time2 : " + time2); // 時・分・秒を指定(0時1分2秒) LocalTime time3 = LocalTime.of(0, 1, 2); System.out.println("time3 : " + time3); // 時・分・秒・ナノ秒指定(23時59分59秒10ナノ秒) LocalTime time4 = LocalTime.of(23, 59, 59, 59); System.out.println("time4 : " + time4); // 12時30分20秒を生成 LocalTime time5 = LocalTime.of(12, 30, 20); System.out.println("time5 : "); // 時・分・秒・ナノ秒を個別に取り出す System.out.println(" 時:" + time5.getHour()); System.out.println(" 分:" + time5.getMinute()); System.out.println(" 秒:" + time5.getSecond()); System.out.println(" ナノ秒:" + time5.getNano()); // 秒・分・時間を加減算してみる LocalTime time6 = LocalTime.of(12, 30, 20); System.out.println(time6 + "の10秒後: " + time6.plusSeconds(10)); System.out.println(time6 + "の30分後: " + time6.plusMinutes(30)); System.out.println(time6 + "の1時間後: " + time6.plusHours(1)); System.out.println(time6 + "の30秒前: " + time5.minusSeconds(30)); System.out.println(time6 + "の3分前: " + time5.minusMinutes(3)); System.out.println(time6 + "の13時間前: " + time5.minusHours(13)); LocalTime time7 = LocalTime.of(11, 22, 33); // 7分間を加算・減算してみる System.out.println(time7 + "の7分後: " + time7.plus(Duration.ofMinutes(7))); System.out.println(time7 + "の7分前: " + time7.minus(Duration.ofMinutes(7))); // 時刻文字列からparseしてみる LocalTime time8 = LocalTime.parse("12:34:56", DateTimeFormatter.ofPattern("HH:mm:ss")); System.out.println("time8 : " + time8); System.out.println("###"); // 存在しない23時61分0秒とか指定するとDateTimeExceptionがスローされる try { LocalTime.of(23, 61, 0); } catch (DateTimeException e) { e.printStackTrace(); } } }
org.threeten.bp.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(); }
■実行結果
org.threeten.bp.DateTimeException: Invalid date 'FEBRUARY 30' at org.threeten.bp.LocalDate.create(LocalDate.java:385) at org.threeten.bp.LocalDate.of(LocalDate.java:220) at org.threeten.bp.LocalDateTime.of(LocalDateTime.java:229) at sample.threeten.LocalDateTimeClient.main(LocalDateTimeClient.java:86)
試したソースコードの全体は以下です。
import org.threeten.bp.DateTimeException; import org.threeten.bp.Duration; import org.threeten.bp.LocalDateTime; import org.threeten.bp.Month; import org.threeten.bp.Period; import org.threeten.bp.format.DateTimeFormatter; public class LocalDateTimeClient { 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(); } } }