覚えたら書く

IT関係のデベロッパとして日々覚えたことを書き残したいです。twitter: @yyoshikaw

java.time.LocalDate

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();
        }
    }
}



関連エントリ