2016-08-09 66 views
0

下面的代碼做了我想要的,除了最後的輸出。在while循環中使用日曆?

Calendar cal = Calendar.getInstance(); 
    cal.clear(); 
    cal.set(1986, 8, 20); 
    int year = cal.get(Calendar.YEAR); 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
    while (year >= cal.get(Calendar.YEAR)) { 
     cal.add(Calendar.DAY_OF_MONTH, 7); 
     System.out.println(sdf.format(cal.getTime())); 
    } 

這裏是輸出:

1986-09-27 
1986-10-04 
1986-10-11 
1986-10-18 
1986-10-25 
1986-11-01 
1986-11-08 
1986-11-15 
1986-11-22 
1986-11-29 
1986-12-06 
1986-12-13 
1986-12-20 
1986-12-27 
1987-01-03 

我要利用這個while循環執行不可逆的代碼,我希望它是當打之年不是1987年。然而,1987年的節目在這裏,我已經試過修改while循環條件獲得的最後一項是

1986年12月27日

,但無濟於事。

期望的輸出與上面的輸出相同,除非沒有1987年的日期。

+0

你想循環跳過1987或1987年時 –

+0

@SamOrozco停止我希望它停止在1987年 –

回答

3

您的循環在執行之後執行添加它正在執行檢查。所以,你可能只是想:

while (year >= cal.get(Calendar.YEAR)) { 
    System.out.println(sdf.format(cal.getTime())); 
    cal.add(Calendar.DAY_OF_MONTH, 7); 
} 

這將改變使用的第一個值,但是 - 如果你想同第一個值,所以你可能要之前額外add呼叫循環的開始,你」現在重新打印。

1

java.time(Java 8)選擇:

for(LocalDate date = LocalDate.of(1986, 9, 27); 
     date.getYear() < 1987; 
     date = date.plusWeeks(1)) { 
    System.out.println(DateTimeFormatter.ISO_DATE.format(date)); 
} 

輸出:

1986-09-27 
1986-10-04 
1986-10-11 
1986-10-18 
1986-10-25 
1986-11-01 
1986-11-08 
1986-11-15 
1986-11-22 
1986-11-29 
1986-12-06 
1986-12-13 
1986-12-20 
1986-12-27 
+0

我打算使用這個,因爲其他人一直告訴我日曆已經過時了,我的其他問題之一。謝謝,Jorn! –