Java 8:決定兩個LocalDateTime 實例之間的時差
在Java 8 中,LocalDateTime 類別表示沒有時區的日期和時間。要計算兩個 LocalDateTime 實例之間的差異,可以使用 period 和 Duration 類別。但是,您的程式碼在月份值之後產生了錯誤的結果。
原始實作中的程式碼不正確:
問題出在getTime() 方法中,特別是在小時、分鐘和秒的計算:
Duration duration = Duration.between(today, now); long seconds = duration.getSeconds(); long hours = seconds / SECONDS_PER_HOUR; long minutes = ((seconds % SECONDS_PER_HOUR) / SECONDS_PER_MINUTE); long secs = (seconds % SECONDS_PER_MINUTE);
這種方法是不正確的,因為它假設持續時間總是為正。當 fromDateTime 大於 toDateTime 時,它無法處理遇到的負值。
使用ChronoUnit 的替代方法:
精確計算LocalDateTime 實例之間的差異,包括負值的情況值,最好使用ChronoUnit enum:
long minutes = ChronoUnit.MINUTES.between(fromDateTime, toDateTime); long hours = ChronoUnit.HOURS.between(fromDateTime, toDateTime);
ChronoUnit提供了計算各種時間單位(例如年、月、日、時、分、秒)差異的方法。它可以正確處理正值和負值。
透過利用 ChronoUnit,您的程式碼將為所有場景提供準確的結果。
以上是如何精確計算兩個 Java 8 LocalDateTime 實例之間的時間差?的詳細內容。更多資訊請關注PHP中文網其他相關文章!