java.time.LocalDate
の利用サンプルです。
サンプルコードで試したのは以下の通りです。
現在日付の取得
■API
LocalDate#now
■サンプル
// 現在日付 LocalDate date1 = LocalDate.now(); // 現在日付がyyyy-MM-dd 形式で出力される System.out.println("date1 : " + date1);
■実行結果
date1 : 2016-09-11
特定の日付を指定してのインスタンス生成
■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(); }
■実行結果
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.LocalDate; import java.time.Month; import java.time.Period; import java.time.format.DateTimeFormatter; public class Java8LocalDateClient { 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(); } } }