計算Joda-Time 日期之間的天數
使用Joda-Time 時,通常需要確定兩個日期之間的天數差異。雖然 Days.daysBetween 方法提供了解決方案,但它並不總是能正確處理夏令時 (DST) 調整。
為了確保準確的日期計算,請使用以下方法:
Days.daysBetween(start.toLocalDate(), end.toLocalDate()).getDays()
此程式碼使用toLocalDate() 將開始和結束DateTime 實例轉換為LocalDate,有效地忽略小時、分鐘和秒
具有DST歧義的範例
考慮以下具有DST 歧義的範例:
// 5am on October 20th to 1pm on October 21st, 2013, Brazil DateTimeZone BRAZIL = DateTimeZone.forID("America/Sao_Paulo"); DateTime start = new DateTime(2013, 10, 20, 5, 0, 0, BRAZIL); DateTime end = new DateTime(2013, 10, 21, 13, 0, 0, BRAZIL); // Using withTimeAtStartOfDay() System.out.println(Days.daysBetween(start.withTimeAtStartOfDay(), end.withTimeAtStartOfDay()).getDays()); // Using toLocalDate() System.out.println(Days.daysBetween(start.toLocalDate(), end.toLocalDate()).getDays());
使用withTimeAtStartOfDay() 會導致錯誤答案為0,而toLocalDate() 方法正確回傳1 day.
透過轉換為LocalDate,我們消除了DST造成的歧義,並獲得更準確的天數差異。無論時區或夏令時的考量如何,這種方法都能確保一致的結果。
以上是如何精確計算兩個 Joda-Time 日期之間的天數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!