Groovy Calendar.set错误或无限循环

Groovy Calendar.set错误或无限循环,groovy,calendar,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, mo

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

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

有人能解释一下为什么这不起作用吗?我不明白。我的目标是在upto循环中获得每月的第一天。

在循环中,您不断地将日历设置回每月的第一天

这类似于如果您这样做:

for (int i = 0; i < 10; i++) {
    i = 0
    println i
}

好的,我知道了。但实际上这是我的目标,我需要显示循环的日期和月份的第一天,例如:2017-01-03/2017-01-01 2017-01-04/2017-01-01。。。2017-02-01/2017-02-01您是否使用Java 8?是的,先生。有可能跳过日历部分,不是吗?是的…我会想出一些非日历和更干净的…一秒钟多谢蒂姆。这很有魅力,现在我有了使用Java8风格的基础
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)
}