如何在Java中迭代日期范围?
在我的脚本中,我需要在给定开始日期和结束日期的日期范围内执行一组操作。
请为我提供指导,以使用Java实现此目的。
for ( currentDate = starDate; currentDate < endDate; currentDate++) {
}
我知道上面的代码根本不可能,但我这样做是为了向你展示我想要实现的目标。
在我的脚本中,我需要在给定开始日期和结束日期的日期范围内执行一组操作。
请为我提供指导,以使用Java实现此目的。
for ( currentDate = starDate; currentDate < endDate; currentDate++) {
}
我知道上面的代码根本不可能,但我这样做是为了向你展示我想要实现的目标。
好吧,你可以使用Java 8的时间API做这样的事情,特别是对于这个问题java.time.LocalDate
(或Java 7及更早版本的等效Joda Time类)
for (LocalDate date = startDate; date.isBefore(endDate); date = date.plusDays(1))
{
...
}
我强烈建议使用(或Joda Time)而不是内置的/类。java.time
Date
Calendar
但是,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)