Java 如何在循环中为日期添加分钟数

Java 如何在循环中为日期添加分钟数,java,loops,date,calendar,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 =

我有一个日期,我想增加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();
} 
inti=10;
而
我的问题是,一次加起来15分钟

您需要在循环开始之前创建
日期
。否则,它将在每次迭代时创建一个新的
日期

hour = new Date();
Calendar cal = Calendar.getInstance();

while(hour < hourEnd){
   cal.setTime(hour);
   cal.add(Calendar.MINUTE, 15);
   hour = cal.getTime();
} 
hour=新日期();
Calendar cal=Calendar.getInstance();
时(小时<小时){
校准设定时间(小时);
计算添加(日历分钟,15);
小时=cal.getTime();
} 
避免遗留类 避免使用旧的遗留日期时间类,如
date
Calendar
。它们设计糟糕、容易混淆且存在缺陷。java中添加了java.time框架以替换这些旧类

使用java.time 获取所需时区的当前时刻

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdtNow = ZonedDateTime.now( z );
显然,您希望增加15分钟的增量,直到到达时钟小时的末尾。最好在半开放式方法中考虑这种时间跨度,其中开始是包含的,但结束是独占的。这意味着我们希望运行到下一个小时的第一个时刻,但不包括下一个小时的第一个时刻

现在循环到增量

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 );
}
zoneDateTime zdt=zdtNow;
列表zdts=新阵列列表(4);
while(zdt.isBefore(zdtNextHourStart)){
添加(zdt);
系统输出打印LN(zdt);
//准备下一个循环。
zdt=zdt.复数(15);
}

在循环之前创建日期。目前,您在每个循环中创建一个新日期,并使用当前时间,然后在其中添加15分钟,但据我所知,只有“添加15分钟”部分实际上应该在循环中。您使用的是麻烦的旧日期时间类,现在是遗留的,被java.time类取代。
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 );
}