Java8时间:以周期步长迭代一天的LocalTime
从午夜开始,我希望以一定周期长度的步骤迭代LocalTimes,直到一天结束 如果周期是8小时10分钟,我想要时间:0:00、8:10、16:20而不是24:30,因为这是第二天 对于小于一天的时间段,我有以下工作代码。是否有更好的,尤其是可读性更强的逻辑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
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并没有提供此功能,而且在编写特殊情况时也没有缩短
用户唯一可以抱怨的是缺少内置的流和时间间隔支持,包括重复性,这可能会使解决方案缩短而不出现循环。我不认为它会像时钟使用时钟算法那样简单。我不认为它会像时钟使用时钟算法那样简单。