在月末循环 Joda Time 月份

Loop through Joda Time months at month end

我用 Joda Time 创建了一个循环,以根据指定的每月频率遍历月份和 return 日期。问题是,如果今天的日期是月底,循环不会 return 我的预期结果。如果我从 2020 年 7 月 31 日开始,经过多次迭代后我想 returned 2021 年 7 月 31 日,而不是 returns 2020 年 7 月 30 日(因为上个月只有 30天)。

我的代码:

int frequency = 3;

for(LocalDate date = startDate; date.isBefore(endDate); date=date.plusMonths(frequency)  {
int date = Integer.parseInt(date.plusMonths(frequency).toString("yyyyMMdd"));
}

我的预期结果应该是: 2020 年 7 月 31 日 2020 年 10 月 31 日 2021 年 1 月 31 日 2021 年 4 月 30 日 2021 年 7 月 31 日。但是这个代码 returns 30 July 2020.

我也试过这段代码,但没有成功:

Integer.parseInt(date.dayOfMonth().withMaximumValue().plusMonths(frequency).toString("yyyyMMdd"));

如何正确地遍历月末?

我必须创建一个最小的、可运行的示例,所以我做了一些假设。

这是我的测试结果。

20200731
20201031
20210131
20210430
20210731
20211031
20220131
20220430

这是我用来生成这些结果的代码。

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;

public class MonthEnd {

    public static void main(String[] args) {
        int frequency = 3;
        LocalDate startDate = LocalDate.now();
        LocalDate endDate = startDate.plus(2, ChronoUnit.YEARS);

        for (LocalDate date = startDate; date.isBefore(endDate);
                date = date.plusMonths(frequency)) {
            LocalDate tdate = date.withDayOfMonth(date.lengthOfMonth());
            String dateString = tdate.format(
                    DateTimeFormatter.ofPattern("yyyyMMdd"));
            int dateInt = Integer.parseInt(dateString);
            System.out.println(dateInt);
        }
    }

}