LocalDateTime インスタンス間の時間差の計算
Java 8 では、2 つの LocalDateTime インスタンス間の差の計算は、Period クラスと Duration クラスを使用して実現できます。 。ただし、現在、コードにはいくつかの不正確な点があります。
元のコード分析
コードでは、Period クラスを使用して、2 つの LocalDateTime インスタンス間の年、月、日を計算しています。 。時差の場合は、時間コンポーネントのみを使用してインスタンスを LocalDateTime に変換し、Duration を使用して差を計算します。
この問題は、時間の計算では fromDateTime が toDateTime より前であると想定しているために発生します。日付が間違っている場合、負の数値が生成され、不正確な時刻値が生成されます。
ChronoUnit を使用したアルゴリズムの改善
より堅牢なアプローチには、ChronoUnit 列挙型の使用が含まれます。時差を計算します。コードの改良部分は次のとおりです。
long hours = ChronoUnit.HOURS.between(fromDateTime, toDateTime); long minutes = ChronoUnit.MINUTES.between(fromDateTime, toDateTime);
ChronoUnit は、2 つの DateTime インスタンスの差を正確に計算する事前定義された単位のセットを提供します。単位を HOURS または MINUTES として指定すると、手動による変換や負の値の処理を必要とせずに、希望の単位で時差を取得できます。
更新された例
ChronoUnit メソッドを使用すると、コードは入力 LocalDateTime インスタンス間の差異を、インスタンスの値に関係なく正しく計算します。 order:
LocalDateTime toDateTime = LocalDateTime.of(2014, 9, 9, 19, 46, 45); LocalDateTime fromDateTime = LocalDateTime.of(1984, 12, 16, 7, 45, 55); long years = Period.between(fromDateTime.toLocalDate(), toDateTime.toLocalDate()).getYears(); long months = Period.between(fromDateTime.toLocalDate(), toDateTime.toLocalDate()).getMonths(); long days = Period.between(fromDateTime.toLocalDate(), toDateTime.toLocalDate()).getDays(); long hours = ChronoUnit.HOURS.between(fromDateTime, toDateTime); long minutes = ChronoUnit.MINUTES.between(fromDateTime, toDateTime); System.out.println(years + " years " + months + " months " + days + " days " + hours + " hours " + minutes + " minutes.");
このコードは、時差を「29 年 8 か月 24 日 12 時間 0 分」として正しく計算します。
以上が2 つの Java LocalDateTime インスタンス間の時間差を正確に計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。