JavaのtimeAPI(LocalDate、LocalTime、LocalDateTime)の使い方を整理しとく

Javaの時間に関するAPIは豊富にそろっていますが、Java7までの主流であるJava.util.Dateやjava.util.Calendarはちょっと使いづらいところがありました。
それが理由かは分かりませんが、8からはより使いやすくなったLocalDate、LocalTime、LocalDateTimeクラスが新たに加わりました。

例えば、Calendarクラスは月が0からスタートしていましたが、LocalDateは1からスタートします。現実世界でも1月がスタートなので、より感覚的に扱えるようになったと言えます。

LocalDate、LocalTime、LocalDateTimeクラスはstaticでなないので、インスタンス作成が必要ですが、明示的にnewする必要はありません。
それぞれのメソッドを使えばインスタンスが生成できます。

【日付のJavaAPI】LocalDateクラス

LocalDateクラスは年月日を扱うAPIです。システム開発ではけっこう当日の日付を取得する機能実装が必要だったりするので、割とよく使うと思います。

【指定日を取得】LocalDateのof、now、parseメソッド

of、now、parseメソッドはそれぞれ、指定した日付を取得、現在日付を取得、文字列を日付値に変換して取得します。

LocalDate.of(2018,10,2)は指定した2018-10-2を返します。
LocalDate.now()は実行した日の日付を返します。実行した日が2018年10月2日なら、2018-10-2を返します。
LocalDate.parse(“2018-10-02”)は文字列の”2018-10-02″を日付の2018-10-2を返します。

【日付時間のJavaAPI】java.time.LocalTime

LocalDateが日付を取得するクラスなのに対して、LocalTimeは時刻を取得するクラスです。使い方はLocalDateとほぼ同じです。注意点としては時間の表示方法です。LocalTimeで表示する時間は午前午後を区別せずに24時間単位で表示します。

LocalTime.of(1,2,25)で1:2:25を返します。1時2分25秒のことです。
LocalTime .now()は現在の時間を返すので、今が10時3分10秒だったら、10:03:10を返します。
LocalTime .parse(“13-2-30”);は文字列”13:2:30″を日付に変換します。表示は変わりません。
最後におまけでplusHoursメソッドも書いておきます。これは時間を加算するメソッドです。
コードではcにplusHoursメソッドで3時間を加算するので、cに3時間を足した16時2分30秒がdに入ります。

【日付時間取得のAPI】java.time.LocalDateTime

LocalDateが日付、LocalTimeが時刻を返すのに対して、LocalDateTimeは日付も時刻も返します。日時両方を扱うクラスです。
LocalDateTimeのメソッドはLocalDateやLocalTimeのメソッドと似ているので詳しい説明は省きますが、参考までに1つだけofメソッドを書いておきます。

これで2018-2-4 9:24:10と表示されます。

【時間差計算のAPI】java.time.Duration

Durationクラスは時間の差を計算するメソッドです。Durationクラスのbetweenメソッドに2つの時間を渡すとその差を戻します。

aに9:00:00、bに11:00:00を入れています。
Durationのbetweenメソッドではaとbをパラメータにしているのでb-aの結果がcに入ります。
System.out.printlnでto.Hours()メソッドを実行していますが、これはcを時間で表すメソッドなので、結果は2になります。tominutes()やtodays()メソッドもあります。

Javaの時間APIのまとめ

Java8からAPIはかなり使いやすくなったように思います。とくにCalendarでは月が0月スタートだったのに、LocalDateでは1月からスタートになったのが大きいなぁと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です