用不同的时间显示时间

时间:2016-07-19 08:29:45

标签: java

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

5 个答案:

答案 0 :(得分:2)

answer by Draken是正确的。您正在添加i,您应该在其中添加一个1

java.time

你也在使用现在已经过时的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);
}

Here's a fiddle of it working

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