在月末循环 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);
}
}
}
我用 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);
}
}
}