2017-04-07 39 views
2

我有一个日期,我想在满足某些条件的情况下增加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(); 
} 
+1

在循环前创建你的日期。目前,您在每个循环中用当前时间创建一个新日期,然后将15分钟添加到该日期,但根据我的理解,只有“添加15分钟”部分实际上应在循环内部。 –

+0

您正在使用麻烦的旧日期时间类,现在是遗留的,由java.time类代替。 –

回答

3

我的问题是,它增加了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(); 
} 
3

避免遗留类

避免旧的遗留日期时间类,如DateCalendar。它们设计不佳,混乱和缺陷。 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); 
}