Java时间循环 - 迭代

时间:2018-02-21 13:28:02

标签: java time hashmap

我处于需要迭代给定时间间隔的情况。 时间以字符串形式给出 前10:33:12到11:22:21 我需要以字符串格式本身迭代间隔中的所有秒。 实现这一目标的最简单方法是什么?

4 个答案:

答案 0 :(得分:2)

您可以创建两个日期实例,并从第一个日期开始循环每秒:

    java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("HH:mm:ss");
    Date first = format.parse("10:33:12");
    Date second = format.parse("11:22:21");

    Date next = first;
    do {
        System.out.println(format.format(next));
    } while ((next = new Date(next.getTime() + 1000)).before(second));

请注意nextwhile条件下进行了修改,我认为这些值已经过验证。

运行该代码会产生此(截断的)输出:

10:33:12
10:33:13
10:33:14
10:33:15
...
11:22:17
11:22:18
11:22:19
11:22:20

答案 1 :(得分:1)

假设时间在当地时间。您可以使用java.time API:

String from = "10:33:12", to = "11:22:21";
LocalTime fromTime = LocalTime.parse(from), toTime = LocalTime.parse(to);

for (LocalTime counter = fromTime;
     counter.compareTo(toTime) <= 0;
     counter = counter.plusSeconds(1)) {
    System.out.println(counter.toString());
}

API很自然 - 像plusSeconds这样的方法可以让你有很大的自由来改变你想要采取的步骤。

LocalTime类忽略夏令时,时区或不同日历系统的所有问题;它就像一个挂钟。如果您想考虑这些问题,可以查看java.time包中的其他类。

答案 2 :(得分:0)

虽然我不知道您的时间的初始数据类型(String?)我会将其转换为时间

DateFormat formatter = new SimpleDateFormat("HH:mm"); or any other format of your choice.
java.sql.Time timeValue = new java.sql.Time(formatter.parse(your_time).getTime());

和你的第二次timeValue相同

结果将是Long类型。现在您只需从timeValue1迭代到timeValue2

while(timeValue1 < timeValue2) { ... }

如果您现在想要每秒打印一次,只需将时间(Long)格式化回String

您的问题非常广泛,所以答案也是......

答案 3 :(得分:0)

这个答案可以解决您的问题 https://stackoverflow.com/a/48907495/4587961

但是,我会做出改进。我不是每次在while循环中创建一个新的DateLocalDateTime对象,而是将开始日期和结束日期转换为Long毫秒,并迭代整数(longs)。

Date startDate = parseDate(startDateString);//Date does not have time zone.
long startMillis = startDate.getTime();

Date endDate = parseDate(endDateString);
long endMillis = endDate.getTime();

long startSeconds = startMillis / 1000;
long endSeconds = endMillis / 1000;

long current = startSeconds;
while (current < endSeconds) {
    doYourStuff();//You can build a date from milliseconds and use SimpleDateFormtatter with any timezone to output your date in any time zone.
    current = current + 1;
}