12

このページでは、次のことを読みました。

日付の計算も非常に簡単です。Java < 1.8 の現在の状況と比較して、おそらく最高の改善:

Period p = Period.of(2, HOURS);
LocalTime time = LocalTime.now();
LocalTime newTime = time.plus(p); // or time.plus(5, HOURS); or time.plusHours(5); 

バージョン < 1.8 より前の利点は明確にわかりません。

多分誰かが私に例を与えることができますか?Atm 私は、新しい日付と時刻の API の改善がどこから来たのかを自問しています。

4

2 に答える 2

29

Java < 8 では、次のように記述する必要があります。

Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR, cal.get(Calendar.HOUR) + 2);

対 Java 8:

LocalTime now = LocalTime.now();
LocalTime later = now.plus(2, HOURS);

改善は基本的にオンです

  • 読みやすさ:
    • Calendar.getInstance()Javadoc を読まないと、どのインスタンスを取得しているのかを判断するのは困難です。LocalTime.now()は非常に自己記述的です。時間を取得すると、です。
    • 日付をオフセットするには、オフセット メソッド ( plus) を呼び出しますが、Calendar API ではオブジェクトのフィールド (この例では時間) を手動で変更する必要があるため、エラーが発生しやすくなります。
  • 使いやすさ (たとえば、このページの下部にある表で比較してください):
  • 安全性:
    • cal.set(123, 2)Calendar API は安全ではありません。あまり役に立たない をスローする書き込みを妨げるものは何もありませんArrayOutOfBoundsException。新しい API は、その問題を解決する列挙型を使用します。
    • 新しい API は不変オブジェクトを使用するため、スレッド セーフになります。

全体として、新しい API は、かなり長い間 Java Date API として好まれてきた jodatime から大きく影響を受けています。Java (<1.8) 日付と JodaTime のこの詳細な比較も読むことができます(そのほとんどは Java 8 Date API に適用されます)。

于 2013-07-11T05:44:04.780 に答える