无法添加时间来生成时间列表

时间:2015-01-16 01:30:36

标签: java

我正在尝试用Java生成时间列表。关于如何一起添加两次,我已阅读this。我在转换为使用时间之前使用浮点数编写代码,因此我知道代码的一般格式有效。这是我遇到困难的代码:

public class Test2 {

    public static void main(String[] args){
        String time = "09:00";
        String quarterHour = "00:15";
        String halfHour = "00:30";
        String quarterHour3 = "00:45";
        SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm");
        Date times;
        Date temp;
        long sum;


        try {
            times = timeFormat.parse(time);
            while(times.before(timeFormat.parse("15:15"))){
                System.out.println("Timelist: " + time);
                if((times.equals(timeFormat.parse("10:15"))) || (times.equals(timeFormat.parse("13:45")))){
                    temp  = timeFormat.parse(halfHour);
                    sum   = times.getTime() + temp.getTime();
                    time  = timeFormat.format(new Date(sum));
                    times = timeFormat.parse(time);
                }
                else if(times.equals(timeFormat.parse("11:45"))){
                    temp  = timeFormat.parse(quarterHour3);
                    sum   = times.getTime() + temp.getTime();
                    time  = timeFormat.format(new Date(sum));
                    times = timeFormat.parse(time);
                }
                else{
                    temp  = timeFormat.parse(quarterHour);
                    sum   = times.getTime() + temp.getTime();
                    time  = timeFormat.format(new Date(sum));
                    times = timeFormat.parse(time);
                }
            }
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

我得到的结果就是09:00。它经历了一次循环并结束。

我通过调试器跟踪它,发生的事情是,当它将quarterHour添加到时间时它会增加12:15而不是00:15,因为它应该是。

这似乎与我使用24小时的时间有关,就像我改变了:

SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm");

为:

SimpleDateFormat timeFormat = new SimpleDateFormat("hh:mm");

它有效 - 除了它进入一个永恒的循环。

问题:在使用24小时格式时,如何让它仅添加15分钟?

2 个答案:

答案 0 :(得分:2)

使用Calendar,或者如果您使用的是Java 8,则可以使用新的java.time类,例如

String timeStr = "09:00";
DateFormat timeFormat = new SimpleDateFormat("HH:mm");
try {
    LocalDateTime endTime = LocalDateTime.ofInstant(
            Instant.ofEpochMilli(timeFormat.parse("15:15").getTime()),
            ZoneOffset.ofHours(0));
    Instant instant = Instant.ofEpochMilli(timeFormat.parse(timeStr)
            .getTime());
    LocalDateTime time = LocalDateTime.ofInstant(instant,
            ZoneOffset.ofHours(0));
    while (time.isBefore(endTime)) {
        time = time.plus(15, ChronoUnit.MINUTES);
        Instant output = time.atZone(ZoneOffset.ofHours(0)).toInstant();
        System.out.println(timeFormat.format(Date.from(output)));
    }
} catch (Exception e) {
    e.printStackTrace();
}

或者Calendar喜欢

String timeStr = "09:00";
DateFormat timeFormat = new SimpleDateFormat("HH:mm");
try {
    Calendar cal = Calendar.getInstance();
    cal.setTime(timeFormat.parse(timeStr));
    Date when = timeFormat.parse("15:15");
    while (cal.getTime().before(when)) {
        cal.add(Calendar.MINUTE, 15);
        System.out.println(timeFormat.format(cal.getTime()));
    }
} catch (Exception e) {
    e.printStackTrace();
}

答案 1 :(得分:1)

将此行添加到您的代码中:

timeFormat.setTimeZone(TimeZone.getTimeZone("GMT"));

在您宣布timeFormat之后立即。

它可以解决您的问题。