簡體   English   中英

Java 8時間:以周期為單位遍歷一天的LocalTime

[英]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)提供的,並且在編碼特殊情況時也沒有真正縮短。

用戶在這里唯一可抱怨的是缺少內置的流和時間間隔支持(包括重復出現),這可能會導致更短的解決方案而不會循環。

沒有內置的代碼來支持這種迭代。

這可能是更容易使用LocalDateTimeLocalTime ,因為它會處理結束條件較好的(使用任意的日期,如果有使用沒有明顯的日期,然后循環,直到日期是以下日期。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM