java-beginner.com ブログ

プログラミングを学習するブログ(Javaをメインに)

Date-Time APIのDurationとPeriod

投稿日:

最終更新日:2016年10月04日

アイキャッチ

こんにちは。「Javaを復習する初心者」です。

今回はDate-Time APIのDurationとPeriodを使ってみました。

時間の量を表現するクラスとしてDurationがあります。このクラスはLocalDateTimeのplusメソッドの引数に指定できます。

インスタンスはDurationクラスのstaticメソッドを使います。of、ofDays、ofHoursなどがあります。

ofDaysメソッド

以下のプログラムではofDaysメソッドを使って、インスタンスを生成しています。引数に12を指定しているので12日間を表します。

ソース

        Duration duration = Duration.ofDays(12);
        System.out.println(duration.toDays());
        System.out.println(duration.toHours());

結果

12
288

toDays()メソッドで日数、toHours()メソッドで時数を取得することができます。上記では12日、288時間という結果が出力されています。

plusメソッド

さて、LocalDateTimeクラスにはplus(TemporalAmount amountToAdd)メソッドがあります。引数はTemporalAmountインターフェースですが、このインターフェースの実装クラスがDurationです。なのでplusメソッドの引数に指定することができます。

以下のプログラムでは「2日」を加算した場合、「2時間」を加算した場合の結果を出力しています。

ソース

        LocalDateTime time = LocalDateTime.of(1999, 1, 2, 3, 4, 5);

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
        System.out.println(time.format(formatter));
        System.out.println(time.plus(Duration.ofDays(2)).format(formatter));
        System.out.println(time.plus(Duration.ofHours(2)).format(formatter));

結果

1999/01/02 03:04:05
1999/01/04 03:04:05
1999/01/02 05:04:05

2番目の出力が「2日」加算された結果になってます。3番目の出力が「2時間」加算された結果になっています。

Periodクラス

時間の量を表すクラスとしてPeriodクラスというのもあります。このクラスもTemporalAmountインターフェースの実装クラスです。インスタンスを生成するためのstaticメソッドがいくつか用意されています。今回は「of(int years, int months, int days) 」を使ってみました。以下のプログラムでは1年2か月3日という期間を定義して、LocalDateTimeに加算しています。

ソース

        LocalDateTime time = LocalDateTime.of(1999, 1, 2, 3, 4, 5);

        Period period = Period.of(1, 2, 3);

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
        System.out.println(time.format(formatter));
        System.out.println(time.plus(period).format(formatter));

結果

1999/01/02 03:04:05
2000/03/05 03:04:05

出力結果を見ると、年月日が加算されているのが確認できます。