首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查找指定日期的所有投递日期(会计)

查找指定日期的所有投递日期(会计)
EN

Stack Overflow用户
提问于 2019-12-02 19:44:43
回答 1查看 57关注 0票数 0

我正在做一份会计报告,其中一份报告要求列出从指定日期开始的最后四周的所有发布日期。

邮寄日期是一周的最后一天,在我们的情况下是星期日还是一个月的最后一天。

例如。如果我输入2019年12月1日,那么我将列出以下列表:

  • 第一周:2019-12/01/2019
  • 第一周:2019-11/25/2019- 11/30/2019
  • 第二周:2019-11/18/2019- 11/24/2019
  • 第三周:2019-11/11/2019
  • 第四周:2019-11/04/2019- 11/10/2019

正如你在这里看到的,有5个邮寄日期。有的时候有4周。

以下是4个发布日期的示例:周末10/27/2019

  • 第一周:2019-10/21/2019- 10/27/2019
  • 第二周:2019-10/14/2019- 10/20/2019
  • 第三周:2019-10/07/2019- 10/13/2019
  • 第4周:2019年10月1日至2019年6月10日

输入值将始终为星期日,即周末。

我想知道是否有一个经过测试的库已经具备了这种功能,而不是编写我自己的逻辑来处理日期。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-03 02:56:21

java.time

我怀疑一个经过测试的库是否提供了你想要的东西,尽管你可能会尝试你的搜索引擎的运气。使用java.time (现代java.time和time ),自己编写代码并不难。要做到这一点,有许多方法。以下几点对我来说是自然的:

代码语言:javascript
运行
复制
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;
}

让我们用你的两个样本日期来尝试一下:

代码语言:javascript
运行
复制
    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个发布日期的例子:

代码语言:javascript
运行
复制
    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。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59145682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档