Java 查找给定日期的所有过帐日期(会计)
我正在做一份会计报告,其中一份报告要求列出从给定日期算起过去四周内的所有发布日期 发布日期是一周的最后一天,在我们的例子中是星期天吗 或者是一个月的最后一天 比如说。如果我进入2019年12月1日,我将看到以下列表:Java 查找给定日期的所有过帐日期(会计),java,date,accounting,Java,Date,Accounting,我正在做一份会计报告,其中一份报告要求列出从给定日期算起过去四周内的所有发布日期 发布日期是一周的最后一天,在我们的例子中是星期天吗 或者是一个月的最后一天 比如说。如果我进入2019年12月1日,我将看到以下列表: 第一周:2019年1月12日至2019年1月12日 第一周:2019年11月25日至2019年11月30日 第2周:2019年11月18日至2019年11月24日 第3周:2019年11月11日-2019年11月17日 第4周:2019年4月11日至2019年10月11日 正如
- 第一周:2019年1月12日至2019年1月12日
- 第一周:2019年11月25日至2019年11月30日
- 第2周:2019年11月18日至2019年11月24日
- 第3周:2019年11月11日-2019年11月17日
- 第4周:2019年4月11日至2019年10月11日
- 第一周:2019年10月21日-2019年10月27日
- 第2周:2019年10月14日-2019年10月20日
- 第3周:2019年7月10日至2019年13月10日
- 第4周:2019年1月10日至2019年6月10日
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;
}
输出为:
我注意到最后一个例子包括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)));
链接:解释如何使用java.time。java.time
我怀疑一个经过测试的库是否能提供你想要的东西,尽管你可以试试你的搜索引擎。使用现代java日期和时间API java.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;
}
输出为:
我注意到最后一个例子包括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)));
链接:解释如何使用java.time。这个问题的答案提供了实现这一点的代码:@spork,不完全是这样,但需要大量的工作。感谢您提供了一个非常有用的链接。这个问题的答案提供了代码来实现这一点:不完全是这样,@spork,但这是一项非常重要的工作。谢谢你提供了一个非常有用的链接。很好!现在我开始喜欢这个新的(Java8)Java.time API。谢谢你指出这一点!好的!现在我开始喜欢这个新的(Java8)Java.time API。谢谢你指出这一点!
[2019-09-29, 2019-09-22, 2019-09-15, 2019-09-08]
[2019-07-14, 2019-07-07, 2019-06-30, 2019-06-23]