我正在做一份会计报告,其中一份报告要求列出从指定日期开始的最后四周的所有发布日期。
邮寄日期是一周的最后一天,在我们的情况下是星期日还是一个月的最后一天。
例如。如果我输入2019年12月1日,那么我将列出以下列表:
正如你在这里看到的,有5个邮寄日期。有的时候有4周。
以下是4个发布日期的示例:周末10/27/2019
输入值将始终为星期日,即周末。
我想知道是否有一个经过测试的库已经具备了这种功能,而不是编写我自己的逻辑来处理日期。
发布于 2019-12-03 02:56:21
java.time
我怀疑一个经过测试的库是否提供了你想要的东西,尽管你可能会尝试你的搜索引擎的运气。使用java.time (现代java.time和time ),自己编写代码并不难。要做到这一点,有许多方法。以下几点对我来说是自然的:
public static List<LocalDate> getPostDates(LocalDate endDate) {
DayOfWeek dow = endDate.getDayOfWeek();
if (! dow.equals(DayOfWeek.SUNDAY)) {
throw new IllegalArgumentException("End date must be Sunday, was " + dow);
}
List<LocalDate> result = new ArrayList<>(5);
for (int week = 1; week <= 4; week++) {
LocalDate lastDayOfWeek = endDate.minusWeeks(week - 1);
result.add(lastDayOfWeek);
// If the week crosses a month boundary, also add last day of month
int dom = lastDayOfWeek.getDayOfMonth();
if (dom < 7) {
result.add(lastDayOfWeek.minusDays(dom));
}
}
return result;
}让我们用你的两个样本日期来尝试一下:
System.out.println(getPostDates(LocalDate.of(2019, Month.DECEMBER, 1)));
System.out.println(getPostDates(LocalDate.of(2019, Month.OCTOBER, 27)));产出如下:
2019-12-01,2019-11-30,2019-11-24,2019-11-17,2019-11-11-10
我注意到最后一个例子是9月30日,你的问题中没有提到这一点。这是从10月27日起的最后四个星期内,而且是一个月底,所以我认为是正确的?
只有4个发布日期的例子:
System.out.println(getPostDates(LocalDate.of(2019, Month.SEPTEMBER, 29)));
System.out.println(getPostDates(LocalDate.of(2019, Month.JULY, 14)));2019-09-29、2019-09-22、209-09-15、209-09-08
链接: Oracle教程:日期时间解释如何使用java.time。
https://stackoverflow.com/questions/59145682
复制相似问题