2
A
回答
2
這裏我假設一個半開的時間間隔,意思是包括開始但不包括結束。首先,我使用LocalDate
這一類型來排除牆上時間對日期差異的影響。
public int getCountOfMidnights(Interval interval) {
LocalDate start = interval.getStart().toLocalDate();
LocalDate end = interval.getEnd().toLocalDate();
int countOfMidnights = Days.daysBetween(start, end).getDays();
if (interval.getStart().toLocalTime().equals(LocalTime.MIDNIGHT)) {
countOfMidnights++;
}
return countOfMidnights;
}
,因爲有機磷農藥自己的答案的UPDATE:
我已經測試他的代碼,尤其是對於引種夏季在二○一三年十月二十○日在午夜跳躍到T01時區「美洲/聖保羅」:00代替。
輸出使用@GabrielBauman產量的溶液:
DateTimeZone tz = DateTimeZone.forID("America/Sao_Paulo");
DateTime start = new DateTime(2013, 10, 20, 5, 0, tz);
DateTime end = new DateTime(2013, 10, 21, 0, 0, tz);
Interval interval = new Interval(start.withTimeAtStartOfDay(), end);
System.out.println(getCountOfMidnights(interval)); // 0!!!
用我的溶液中的正確結果爲1,還設有在帳戶不採取條件的另一問題,如果一個間隔開始於午夜(OP具有考慮這是否應該算在內。在我看來,是的,另請參見我的評論)。
結論:我們在計算午夜時基本上只有一個約會場景。
因此明智的做法是避免時間類型,其包括在內部的時區(如果可能的話)(如Joda- DateTime
或JDK-的GregorianCalendar或ZonedDateTime
在新的JSR-310),因爲這裏的時間算術不明確的sooo(它是對於牆壁時間比較也是合情合理的)。這是我使用LocalDate
這類本地類型的主要原因。這也是我爲什麼在自己的庫中放棄這種混合類型的幾個原因之一(另一個原因是例如直接存儲在數據庫中的缺失選項)。這些具有日期,時間和時區的多用途類型遠不如大多數用戶所認爲的那樣有用。在大多數情況下,使用本地類型並使用全局類型主要用於時區感知轉換目的。
0
我想出了以下內容:
public int getCountOfMidnights(Interval i) {
return Days.daysIn(i.withStart(i.getStart().withTimeAtStartOfDay())).getDays();
}
從本質上講,我調整間隔的開始時間到時間在一天(通常是午夜)開始,然後計算包含在調整區間充分的天數。
不確定這是比其他答案更好還是更差,等待一些測試,所以我會留在這裏以防萬一有人發表評論。
相關問題
- 1. 如何計算午夜時間間隔?
- 2. 午夜時間問題
- 3. 如何檢測時間已過午夜?
- 4. 如何在幾秒鐘內獲得午夜以來的時間
- 5. NSTime今天與零時間間隔(午夜)
- 6. 在某個固定的時間間隔內檢索數據
- 7. 午夜時間到秒之間
- 8. 後在午夜時間的PostgreSQL
- 9. 如何獲得給定時區的「午夜」的UTC時間?
- 10. 當時間是午夜做一個mysql_query
- 11. SQL中的時差。午夜總時間
- 12. Reporting Services:DateTime參數在午夜時間不顯示時間部分
- 13. 如果$時間=午夜,改變$日
- 14. 如何從UTC時間計算當地午夜時間
- 15. 在mysql中從午夜減去時間
- 16. HTML輸入時間最多在午夜
- 17. 如何用PHP獲得午夜時間的小時數
- 18. 確定它的夜間時間
- 19. 從特定時間戳獲取午夜時間戳值
- 20. 以不同時間間隔計算時間戳 - 以跨越午夜的間隔問題
- 21. 自午夜以來的時間
- 22. 午夜訂單後的24h時間
- 23. 在其他時區獲取當地時間午夜時間
- 24. 在給定時間間隔內事件發生的次數
- 25. 計算午夜時間差異
- 26. SQL設置時間到午夜功能
- 27. Datediff當時間跨越午夜
- 28. 處理時間和午夜後
- 29. 如何查詢時間數據類型,並在午夜兩點之間變化
- 30. 通過午夜時間發現兩個值之間的時間差的公式?
感謝您的支持。謹慎批評其他答案? –
@GabrielBauman也許你更喜歡你的解決方案,因爲它是一個單線程。但考慮間隔'新的時間間隔(0,86402000,DateTimeZone.UTC)',這將在我的解決方案中產生2天,而在您的解決方案中會產生1天。所以這兩個答案都不相同。 –
感謝您進一步檢查!這裏有一些非常好的信息。我會標記你的答案是正確的;真的很感謝你的努力。 –