2017-01-16 68 views
0

以下似乎不工作,它似乎會導致一個無限循環:Calendar.set錯誤或無限循環

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循環中獲得每月的第一天。

回答

1

在循環中,你不斷地設置日曆回一個月的第一天...

它類似於如果你這樣做:

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

(也寫不完要麼)

此外,你的代碼將運行兩個日期...我不認爲之間的每一天都是你在找什麼或者

,如果你使用IM它更容易在日曆上可變的東西,而當你在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) 
} 
+0

ok我明白了。但實際上這仍然是我的目標,我需要顯示該循環的日期和本月的第一天,例如: 2017-01-03/2017-01-01 2017-01-04/2017-01- 01 ... 2017-02-01/2017-02-01 – laloune

+0

你在使用Java 8嗎? –

+0

是的,先生。有可能跳過日曆部分,不是嗎? – laloune