こんにちは。「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
出力結果を見ると、年月日が加算されているのが確認できます。