[英]Java 8 time: Iterate over a day's LocalTime in period steps
從午夜開始,我想以一定的時間間隔逐步遍歷LocalTime
,直到一天結束。
例如。 如果時間段是8hr10Minutes,我想要時間:0:00、8:10、16:20(而不是24:30,因為這是第二天)
對於少於一天的時間段,我有以下工作代碼。 有更好的(尤其是更具可讀性)邏輯嗎?
Duration period = ...;
for(LocalTime t = LocalTime.MIDNIGHT, p = LocalTime.MIDNIGHT;
t.isAfter(p) || t.equals(p) ; p = t, t = t.plus(period)){
// do something with t
}
同樣,上述方法在等於一天的倍數(無限循環)的時間段內失敗,或者如果大於一天,則返回數字,就好像該時間段被強制轉換為短於一天一樣(例如24hr10min的行為與10Minutes相同) ),因此如果可以同時解決( if
沒有明確的if
),我也會考慮。
我認為JodaStephen的答案是正確的,並且實施起來不是很困難,並且是一個完整的解決方案,還可以解決所有的問題:
LocalDate date = LocalDate.of(2014, 1, 1); // arbitrary date
LocalDateTime tsp = LocalDateTime.of(date, LocalTime.MIDNIGHT);
do {
System.out.println(tsp.toLocalTime());
tsp = tsp.plus(Duration.ofHours(8).plusMinutes(10));
} while (date.equals(tsp.toLocalDate()));
輸出:
00:00
08:10
16:20
如果不使用任何日期來模擬結束條件,則解決方案將要求具有滾動LocalTime
計算天溢出的功能。 但是,此功能不是JSR-310(java.time-package)提供的,並且在編碼特殊情況時也沒有真正縮短。
用戶在這里唯一可抱怨的是缺少內置的流和時間間隔支持(包括重復出現),這可能會導致更短的解決方案而不會循環。
沒有內置的代碼來支持這種迭代。
這可能是更容易使用LocalDateTime
是LocalTime
,因為它會處理結束條件較好的(使用任意的日期,如果有使用沒有明顯的日期,然后循環,直到日期是以下日期。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.