以下似乎不起作用,似乎导致无限循环:
import java.text.SimpleDateFormat;
SimpleDateFormat out=new SimpleDateFormat('yyyy-MM-dd');
def from = Calendar.instance
from.set(year: 2017, month: Calendar.JANUARY, date: 3)
def to = Calendar.instance
to.set(year: 2017, month: Calendar.FEBRUARY, date: 3)
from.upto(to) {
cal=it;
prev=cal;
prev.set(Calendar.DAY_OF_MONTH, 1);
println out.format(prev.getTime());
}
有人可以解释为什么这不起作用?我不明白。我的目标是让每个月的第一天进入上行循环。
答案 0 :(得分:1)
在循环中,您不断将日历设置回月份的第一天......
这与你做的相似:
for (int i = 0; i < 10; i++) {
i = 0
println i
}
(也永远不会完成)
此外,您的代码将在两个日期之间的每一天运行...我认为这不是您正在寻找的
如果你在Calendar上使用不可变的东西会更容易,而且当你使用Java 8时,你可以这样做:
import java.time.*
import java.time.format.*
// Add a next method, so you can do ranges of LocalDates
LocalDate.metaClass.next = { delegate.plusDays(1) }
LocalDate from = LocalDate.of(2017, 1, 3)
LocalDate to = LocalDate.of(2017, 2, 3)
(from..to).each {
println it.format(DateTimeFormatter.ISO_DATE) + " : " + it.withDayOfMonth(1).format(DateTimeFormatter.ISO_DATE)
}