我处于需要迭代给定时间间隔的情况。 时间以字符串形式给出 前10:33:12到11:22:21 我需要以字符串格式本身迭代间隔中的所有秒。 实现这一目标的最简单方法是什么?
答案 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));
请注意next
在while
条件下进行了修改,我认为这些值已经过验证。
运行该代码会产生此(截断的)输出:
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循环中创建一个新的Date
或LocalDateTime
对象,而是将开始日期和结束日期转换为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;
}