如何将分钟添加到循环中的日期
问题描述:
我有一个日期,我想在满足某些条件的情况下增加15分钟。我的问题是它只增加了15分钟一次。 每个屏幕的输出将与此操作类似,但具有日期。如何将分钟添加到循环中的日期
int i = 10;
while (i <= 100){
i = i + 15;
System.out.println(i);
}
Screen output
10
25
40
55
70
85
100
My code for the dates is the following
while(hour < hourEnd){
hour = new Date();
hour = date.getDate();
Calendar cal = Calendar.getInstance();
cal.setTime(hour);
cal.add(Calendar.MINUTE, 15);
hour = cal.getTime();
}
答
我的问题是,它增加了15分钟只有一次。
你需要循环begins.Otherwise之前创建Date
,它会创建在每次迭代新Date
。
hour = new Date();
Calendar cal = Calendar.getInstance();
while(hour < hourEnd){
cal.setTime(hour);
cal.add(Calendar.MINUTE, 15);
hour = cal.getTime();
}
答
避免遗留类
避免旧的遗留日期时间类,如Date
和Calendar
。它们设计不佳,混乱和缺陷。 java.time框架被添加到Java以替换那些旧的类。
使用java.time
获取所需时区的当前时刻。
ZoneId z = ZoneId.of("America/Montreal");
ZonedDateTime zdtNow = ZonedDateTime.now(z);
显然你想增加15分钟的增量,直到到达时钟小时的末尾。在半开放式方法中最好考虑这样的时间跨度,其中开始是包容性的,但结局是排他性的。这意味着我们想跑到但不包括下一个小时的第一刻。
ZonedDateTime zdtNextHourStart = zdtNow.plusHours(1).truncatedTo(ChronoUnit.HOURS) ;
现在循环增加。
ZonedDateTime zdt = zdtNow ;
List<ZonedDateTime> zdts = new ArrayList<>(4);
while(zdt.isBefore(zdtNextHourStart)) {
zdts.add(zdt);
System.out.println(zdt);
// Prepare for next loop.
zdt = zdt.plusMinutes(15);
}
在循环前创建你的日期。目前,您在每个循环中用当前时间创建一个新日期,然后将15分钟添加到该日期,但根据我的理解,只有“添加15分钟”部分实际上应在循环内部。 –
您正在使用麻烦的旧日期时间类,现在是遗留的,由java.time类代替。 –