如何在Java中迭代日期范围?

2022-08-31 06:48:56

在我的脚本中,我需要在给定开始日期和结束日期的日期范围内执行一组操作。
请为我提供指导,以使用Java实现此目的。

for ( currentDate = starDate; currentDate < endDate; currentDate++) {

}

我知道上面的代码根本不可能,但我这样做是为了向你展示我想要实现的目标。


答案 1

好吧,你可以使用Java 8的时间API做这样的事情,特别是对于这个问题java.time.LocalDate(或Java 7及更早版本的等效Joda Time类)

for (LocalDate date = startDate; date.isBefore(endDate); date = date.plusDays(1))
{
    ...
}

强烈建议使用(或Joda Time)而不是内置的/类。java.timeDateCalendar


答案 2

但是,JodaTime很不错,为了完整性和/或如果您更喜欢API提供的功能,以下是标准的API方法。

从如下所示的实例开始时:java.util.Date

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date startDate = formatter.parse("2010-12-20");
Date endDate = formatter.parse("2010-12-26");

以下是传统的java.util.Calendar方法,以防您尚未使用Java8:

Calendar start = Calendar.getInstance();
start.setTime(startDate);
Calendar end = Calendar.getInstance();
end.setTime(endDate);

for (Date date = start.getTime(); start.before(end); start.add(Calendar.DATE, 1), date = start.getTime()) {
    // Do your job here with `date`.
    System.out.println(date);
}

这是Java8的java.time.LocalDate方法,基本上就是JodaTime方法:

LocalDate start = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate end = endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

for (LocalDate date = start; date.isBefore(end); date = date.plusDays(1)) {
    // Do your job here with `date`.
    System.out.println(date);
}

如果要迭代包含结束日期,请分别使用 和。!start.after(end)!date.isAfter(end)