Java8-datetime-api
Java 8-新しい日付/時刻API
Java 8では、新しいDate-Time APIが導入され、古いdate-time APIの次の欠点をカバーしています。
- 非スレッドセーフ-java.util.Dateはスレッドセーフではないため、開発者は日付の使用中に同時実行の問題に対処する必要があります。 新しい日時APIは不変であり、setterメソッドはありません。
- デザインが悪い-デフォルトの日付は1900から始まり、月は1から始まり、日は0から始まるので、均一性はありません。 古いAPIには、日付操作用の直接的なメソッドがあまりありませんでした。 新しいAPIは、このような操作のための多数のユーティリティメソッドを提供します。
- タイムゾーンの扱いが難しい-開発者はタイムゾーンの問題に対処するために多くのコードを書く必要がありました。 新しいAPIは、ドメイン固有の設計を念頭に置いて開発されました。
Java 8では、パッケージjava.timeの下に新しい日時APIが導入されています。 以下は、java.timeパッケージで導入された重要なクラスの一部です。
- ローカル-タイムゾーン処理の複雑さのない簡素化された日時API。
- Zoned -さまざまなタイムゾーンを処理するための特別な日時API。
ローカル日時API
LocalDate/LocalTimeおよびLocalDateTimeクラスは、タイムゾーンが不要な開発を簡素化します。 実際にそれらを見てみましょう。
C:\> JAVAなどで選択したエディターを使用して、次のJavaプログラムを作成します。
Java8Tester.java
結果を確認する
次のように javac コンパイラを使用してクラスをコンパイルします-
次のようにJava8Testerを実行します-
それは次の出力を生成する必要があります-
ゾーン化された日時API
タイムゾーンを考慮する場合は、ゾーン化された日時APIを使用します。 それらの動作を見てみましょう。
C:\> JAVAなどで選択した任意のエディターを使用して、次のJavaプログラムを作成します。
Java8Tester.java
結果を確認する
次のように javac コンパイラを使用してクラスをコンパイルします-
次のようにJava8Testerを実行します-
それは次の出力を生成する必要があります-
クロノ単位の列挙
java.time.temporal.ChronoUnit列挙型がJava 8に追加され、日、月などを表すために古いAPIで使用されていた整数値が置き換えられました。 それらの動作を見てみましょう。
C:\> JAVAなどで選択した任意のエディターを使用して、次のJavaプログラムを作成します。
Java8Tester.java
結果を確認する
次のように javac コンパイラを使用してクラスをコンパイルします-
次のようにJava8Testerを実行します-
それは次の結果を生成する必要があります-
期間と期間
Java 8では、時間差に対処するために2つの特別なクラスが導入されています。
- 期間-日付ベースの時間を扱います。
- 期間-時間ベースの時間を扱います。
それらの動作を見てみましょう。
C:\> JAVAなどで選択した任意のエディターを使用して、次のJavaプログラムを作成します。
Java8Tester.java
結果を確認する
次のように javac コンパイラを使用してクラスをコンパイルします-
次のようにJava8Testerを実行します-
それは次の出力を生成する必要があります-
時間調整器
TemporalAdjusterは、日付数学を実行するために使用されます。 たとえば、「今月の第2土曜日」または「次の火曜日」を取得します。 それらの動作を見てみましょう。
C:\> JAVAなどで選択した任意のエディターを使用して、次のJavaプログラムを作成します。
Java8Tester.java
結果を確認する
次のように javac コンパイラを使用してクラスをコンパイルします-
次のようにJava8Testerを実行します-
それは次の結果を生成する必要があります-
下位互換性
toInstant()メソッドが元のDateおよびCalendarオブジェクトに追加され、これらを使用して新しいDate-Time APIに変換できます。 ofInstant(Insant、ZoneId)メソッドを使用して、LocalDateTimeまたはZonedDateTimeオブジェクトを取得します。 それらの動作を見てみましょう。
C:\> JAVAなどで選択した任意のエディターを使用して、次のJavaプログラムを作成します。
Java8Tester.java
結果を確認する
次のように javac コンパイラを使用してクラスをコンパイルします-
次のようにJava8Testerを実行します-
それは次の出力を生成する必要があります-