如何在循环内的日期中添加分钟

时间:2017-04-07 12:45:08

标签: java loops date calendar

我有一个日期,我希望在满足特定条件的情况下增加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();
} 

2 个答案:

答案 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)

避免遗留类

避免旧的旧版日期时间类,例如DateCalendar。它们设计糟糕,容易混淆,有缺陷。 Java.time框架被添加到Java中以替换那些旧类。

使用java.time

获取所需时区的当前时刻。

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 );
}