繁体   English   中英

在月底循环遍历 Joda Time 月份

[英]Loop through Joda Time months at month end

我用 Joda Time 创建了一个循环来遍历月份并根据指定的每月频率返回日期。 问题是,如果今天的日期是月底,则循环不会返回我的预期结果。 如果我从 2020 年 7 月 31 日开始,经过多次迭代,我希望返回 2021 年 7 月 31 日,而不是返回 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 日 但此代码返回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);
        }
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM