Java 在while循环中使用日历?

Java 在while循环中使用日历?,java,while-loop,calendar,Java,While Loop,Calendar,下面的代码实现了我想要的功能,除了最后的输出 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.YEA

下面的代码实现了我想要的功能,除了最后的输出

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循环条件,以获得最后一个条目

一九八六年十二月二十七日

但是没有用


所需的输出与上面的输出相同,只是没有1987年的日期。

您的循环在执行检查后正在执行添加。所以你可能只是想:

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

但是,这将更改所使用的第一个值-因此,如果您想要与当前打印的第一个值相同的值,则可能需要在循环开始之前进行额外的
add
调用。

您的循环在执行检查后执行add。所以你可能只是想:

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

但是,这将更改所使用的第一个值-因此,如果您想要与当前打印的第一个值相同的值,则可能需要在循环开始之前进行额外的
add
调用。

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

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

您希望循环跳过1987年还是在停止1987@SamOrozco我想让它停在1987年你想让循环跳过1987年还是停在1987年1987@SamOrozco我希望它停在1987年,因为其他人告诉我,日历在我的另一个问题上已经过时了,所以我打算用这个来代替。谢谢你,乔恩!我打算用这个来代替,因为其他人告诉我,日历在我的另一个问题上已经过时了。谢谢你,乔恩!