Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java8时间:以周期步长迭代一天的LocalTime_Java_Time_Localtime_Java Time_Threetenbp - Fatal编程技术网

Java8时间:以周期步长迭代一天的LocalTime

Java8时间:以周期步长迭代一天的LocalTime,java,time,localtime,java-time,threetenbp,Java,Time,Localtime,Java Time,Threetenbp,从午夜开始,我希望以一定周期长度的步骤迭代LocalTimes,直到一天结束 如果周期是8小时10分钟,我想要时间:0:00、8:10、16:20而不是24:30,因为这是第二天 对于小于一天的时间段,我有以下工作代码。是否有更好的,尤其是可读性更强的逻辑 Duration period = ...; for(LocalTime t = LocalTime.MIDNIGHT, p = LocalTime.MIDNIGHT; t.isAfter(p) || t.equals

从午夜开始,我希望以一定周期长度的步骤迭代LocalTimes,直到一天结束

如果周期是8小时10分钟,我想要时间: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的行为与10min相同,因此,如果可以在没有明确ifs的情况下同时解决这个问题,我也会考虑。

没有内置代码来支持这种迭代


使用LocalDateTime可能比使用LocalTime更容易,因为它可以处理结束条件。如果没有明显的日期可以使用,最好使用任意日期,然后循环直到该日期是下一个日期。

没有内置代码支持这种迭代


使用LocalDateTime可能比使用LocalTime更容易,因为它可以处理结束条件,如果没有明显的日期可使用,则最好使用任意日期,然后循环,直到日期是下一个日期。

我认为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并没有提供此功能,而且在编写特殊情况时也没有缩短


用户唯一可以抱怨的是缺少内置的流和时间间隔支持,包括重复性,这可能会使解决方案缩短,而不会出现循环。

我认为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并没有提供此功能,而且在编写特殊情况时也没有缩短


用户唯一可以抱怨的是缺少内置的流和时间间隔支持,包括重复性,这可能会使解决方案缩短而不出现循环。

我不认为它会像时钟使用时钟算法那样简单。我不认为它会像时钟使用时钟算法那样简单。