Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 查找给定日期的所有过帐日期(会计)_Java_Date_Accounting - Fatal编程技术网

Java 查找给定日期的所有过帐日期(会计)

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年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日
正如你在这里看到的,有5个发布日期。有时是4周

以下是4个发布日期的示例:2019年10月27日结束的一周

  • 第一周: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日
输入值将始终为星期日,即一周的末尾

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

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。

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]