Calendar.set错误或无限循环

时间:2017-01-16 10:51:58

标签: groovy calendar

以下似乎不起作用,似乎导致无限循环:

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());
}

有人可以解释为什么这不起作用?我不明白。我的目标是让每个月的第一天进入上行循环。

1 个答案:

答案 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)
}