talosのプログラミング教室

Java Gold合格への道 ~日付/時刻API・時間の計算~

スポンサーリンク

こんにちは。たろすです。

今回は日付/時刻APIの時間の計算について説明します。

加算

加算する方法は二通りあります。

LocalDate date = LocalDate.of(2022, 1, 1);
System.out.println(date.plus(5, ChronoUnit.DAYS));
System.out.println(ChronoUnit.DAYS.addTo(date, 5));
2022-01-06
2022-01-06

一つはplusメソッドを使う方法です。

一つ目の引数には加算する量、二つ目の引数には単位が入ります。


もう一つはaddToメソッドを使う方法です。

DAYSが単位で、一つ目の引数には加算の対象となるオブジェクト、二つ目の引数には加算する量が入ります。

減算

減算する方法は基本的には一通りです。

LocalDate date = LocalDate.of(2022, 1, 1);
System.out.println(date.minus(5, ChronoUnit.DAYS));
2021-12-27

minusメソッドはplusメソッドと対応する減算のメソッドです。

plusメソッドやaddToメソッドの加算する量をマイナスにすれば減算ができますが、ややこしいので避けた方がよいでしょう。

期間の計算

日付

日付の間隔の計算をする方法は三通りあります。

LocalDate date1 = LocalDate.of(2022, 1, 1);
LocalDate date2 = LocalDate.of(2022, 1, 10);
System.out.println(date1.until(date2, ChronoUnit.DAYS));
System.out.println(ChronoUnit.DAYS.between(date1, date2));
System.out.println(Period.between(date1, date2).getDays());
9
9
9

一つ目はuntilメソッドです。

一つ目の引数には対象となる日付オブジェクト、二つ目の引数には単位が入ります。


二つ目はChronoUnitクラスのbetweenメソッドです。

DAYSが単位で、一つ目の引数には期間の始めの日付オブジェクト、二つ目の引数には期間の終わりの日付オブジェクトが入ります。


三つ目はPeriodクラスのbetweenメソッドです。

一つ目の引数には期間の始めの日付オブジェクト、二つ目の引数には期間の終わりの日付オブジェクトが入ります。

Peroioクラスには単位の概念がないのでgetDaysメソッドなどによってどの単位で取得するか指定する必要があります。

時刻

時刻の間隔の計算をする方法も三通りあります。

LocalDateTime time1 = LocalDateTime.of(2022, 1, 1, 0, 0);
LocalDateTime time2 = LocalDateTime.of(2022, 1, 1, 12, 0);
System.out.println(time1.until(time2, ChronoUnit.HOURS));
System.out.println(ChronoUnit.HOURS.between(time1, time2));
System.out.println(Duration.between(time1, time2).toHours());
12
12
12

上二つに関しては日付の期間の計算と同じです。

注意すべきは日付の計算にはPiriodではなくDuraitionを使用することです。

Duraitionも単位の概念がないのでtoHoursメソッドなどを使って単位を指定します。

おわりに

今回は日付/時刻APIの時間の計算について説明しました。