Java

Java8で追加された日時APIの特徴と使い方

Java7までは日付や時刻を扱うときはDateクラスやCalendarクラスを用いていましたが、Java8からは新しい日時関連のクラスがjava.timeパッケージとして追加されました。

勉強がてら、Java8で追加された日時APIの特徴と使い方をメモとして残しておきます。

Java8で追加された日時APIの特徴

  • スレッドセーフである
  • 曖昧な日時を表現できる
  • 「ナノ秒」単位で時間を扱える

DateクラスやCalendarクラスと違って、Java8で追加された日時APIはスレッドセーフなので、マルチスレッド環境でも安全に日付や時刻を扱えます。

「年・月・日・時・分・秒・ナノ秒・タイムゾーン」のうち、いくつかを保持せず曖昧な日時を表現できるのも特徴の1つです。例えば、LocalDateTimeクラスを使うと「年・月・日・時・分・秒・ナノ秒」を表現できたり、Yearクラスを使うと「年」だけを表現できたりします。いい意味で曖昧さを表現できるんですね。

Java7までは最小でも「ミリ秒」単位でしか時間を扱えませんでしたが、Java8からはさらに小さい単位「ナノ秒」まで扱えます。

Java8で追加された代表的な日時クラス

  • Instant
    日時(エポック時間)
  • ZonedDateTime
    日時(タイムゾーンあり)。世界のある「瞬間」の時刻をナノ秒単位で厳密に保持する
  • LocalDateTime
    日時(タイムゾーンなし)。日常的に使われる「曖昧な日時」を保持する
  • Duration
    2つの異なる時刻や日付の期間を保持する(「時・分・秒」単位)
  • Period
    2つの異なる時刻や日付の期間を保持する(「年・月・日」単位)

ここからは、上記クラスの使い方を簡単にまとめます。

Instantクラスの使用例

ZonedDateTimeクラスの使用例

LocalDateTimeクラスの使用例

Durationクラスの使用例

Periodクラスの使用例

まとめ

Java8で追加された日時APIの特徴と使い方をまとめました。

以下書籍の内容がとても参考になりました。Java学習にもってこいの1冊です。

参考リンク

-Java

© 2024 Reasonable Code