public static void main(String[] args) throws ParseException {
String myTime = "08:00";
int diffHour = 2;
SimpleDateFormat df = new SimpleDateFormat("HH:mm");
Date d = df.parse(myTime);
Calendar cal = Calendar.getInstance();
cal.setTime(d);
for (int i=0; i<=diffHour; i++) {
cal.add(Calendar.HOUR, i);
String newTime = df.format(cal.getTime());
System.out.println(newTime);
}
}
输出结果为:
08:00
09:00
11:00
我希望它是:
08:00
09:00
10:00
因为如果我们从10:00
开始,仅在08:00
之前的两个小时内。
为什么输出会从10:00
跳到11:00
?
答案 0 :(得分:2)
answer by Draken是正确的。您正在添加i
,您应该在其中添加一个1
。
你也在使用现在已经过时的java.time类老麻烦的类。
LocalTime
LocalTime
类表示没有日期且没有时区的仅限时间的值。
LocalTime start = LocalTime.parse( "08:00" );
int hours = 2;
LocalTime time = start;
for ( int i = 0 ; i <= hours ; i++ ) {
String output = time.toString();
// Set up next loop.
time = time.plusHours( 1 );
}
答案 1 :(得分:1)
cal.add(Calendar.HOUR, 1);
你正在添加i
,每个循环会增加一个,所以对于第一个,它会添加零,然后是1,然后是2。相反,由于您想要通过具体数字添加,请尝试仅添加1。
虽然这确实意味着您需要从07:00
开始,但另一种选择是放入一些逻辑,但这取决于您的期望。这样的事情可以奏效:
for (int i=0; i<=diffHour; i++) {
if (i <= 1) {
cal.add(Calendar.HOUR, i);
} else {
cal.add(Calendar.HOUR, 1);
}
String newTime = df.format(cal.getTime());
System.out.println(newTime);
}
答案 2 :(得分:0)
尝试这样的事情:
package org.app.temputil;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class Test {
public static void main(String[] args) throws ParseException {
String myTime = "08:00";
int diffHour = 2;
SimpleDateFormat df = new SimpleDateFormat("HH:mm");
Date d = df.parse(myTime);
Calendar cal = Calendar.getInstance();
cal.setTime(d);
for (int i = 0; i <= diffHour; i++) {
cal.add(Calendar.HOUR, i == 0 ? 0 : 1);
String newTime = df.format(cal.getTime());
System.out.println("i=[" + i + "], time=" + newTime);
}
}
}
答案 3 :(得分:0)
以下是您的代码说明 -
for (int i=0; i<=diffHour; i++) {
cal.add(Calendar.HOUR, i);
String newTime = df.format(cal.getTime());
System.out.println(newTime);
}
此处循环正在运行i = 0,1,2。
对于i = 0,将0添加到日历中,以使该值保持与之前的值相同8。
对于i = 1,1添加到日历中,因此值变为8(较早值)+ 1 = 9
对于i = 2,将2添加到日历中,因此值变为9(较早值)+ 2 = 11.
要使其有效,
删除该行 - cal.add(Calendar.HOUR, i);
添加此行 -
if (i == 0) {
cal.add(Calendar.HOUR, 0);
} else {
cal.add(Calendar.HOUR, 1);
}
答案 4 :(得分:0)
将你的循环改为
for (int i=0; i<=diffHour; i++) {
String newTime = df.format(cal.getTime());
System.out.println(newTime);
cal.add(Calendar.HOUR, 1);
}