我有一个日期,我希望在满足特定条件的情况下增加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();
}
答案 0 :(得分:3)
我的问题是它只需要15分钟一次。
你需要在循环开始之前创建Date
。否则,它会在每次迭代时创建一个新的Date
。
hour = new Date();
Calendar cal = Calendar.getInstance();
while(hour < hourEnd){
cal.setTime(hour);
cal.add(Calendar.MINUTE, 15);
hour = cal.getTime();
}
答案 1 :(得分:3)
避免旧的旧版日期时间类,例如Date
和Calendar
。它们设计糟糕,容易混淆,有缺陷。 Java.time框架被添加到Java中以替换那些旧类。
获取所需时区的当前时刻。
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdtNow = ZonedDateTime.now( z );
显然你想要增加15分钟的增量,直到达到时钟结束。最好在半开放式方法中考虑这样的时间跨度,其中开头是包容性的,但结尾是排他性的。这意味着我们想要达到但不包括 next 小时的第一时刻。
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 );
}