【问题标题】:4-4-5 accounting calendar in javajava中的4-4-5会计日历
【发布时间】:2020-05-08 16:09:18
【问题描述】:

我必须在 java 中使用 4-4-5 会计日历。

我正在寻找一种方法,在给定当前月份的特定日期的情况下,获得相应的会计月份。

例如,对于 2020 年,我将有以下会计月份:

29-Dec  25-Jan
26-Jan  22-Feb
23-Feb  28-Mar
29-Mar  25-Apr
26-Apr  23-May
24-May  27-Jun
28-Jun  25-Jul
26-Jul  22-Aug
23-Aug  26-Sep
27-Sep  24-Oct
25-Oct  21-Nov
22-Nov  26-Dec

因此,例如,给定一个 4 月 28 日的日期,我需要收到这样的信息:

26-Apr  23-May

我还尝试将 ThreeTen-Extra 项目与 AccountingChronology 和 AccountingChronologyBuilder 一起使用。但是,说真的,我很难理解如何使用它。

【问题讨论】:

  • 您能否展示您的尝试并提供有关日历逻辑的更多详细信息?为什么它从 12 月 29 日而不是 1 月 1 日开始?我认为这是因为它需要在一周中的某一天开始,但您没有指定哪一天。

标签: java calendar java-time accounting rfc2445


【解决方案1】:

使用ThreeTen-Extra 库很容易获得这些日期。

定义你的年表。使用AccountingChronologyBuilder 实例化AccountingChronology。指定适合您的特定业务实践的属性。请注意我们如何通过AccountingYearDivision 指定 4-4-5。

AccountingChronology acctChrono = new AccountingChronologyBuilder()
        .endsOn(DayOfWeek.SATURDAY)
        .inLastWeekOf(Month.DECEMBER)
        .withDivision(AccountingYearDivision.QUARTERS_OF_PATTERN_4_4_5_WEEKS)
        .leapWeekInMonth(12)
        .toChronology();

使用该年表来实例化AccountingDate。使用TemporalAdjuster 从一个日期移动到另一个日期。

for (int month = 1; month <= 12; month++) {
    AccountingDate start = acctChrono.date(2020, month, 1);
    AccountingDate end = start.with(TemporalAdjusters.lastDayOfMonth());
    System.out.println(start.format(DateTimeFormatter.ISO_LOCAL_DATE) + "  "
                     + end.format(DateTimeFormatter.ISO_LOCAL_DATE));
}

输出

2019-12-29  2020-01-25
2020-01-26  2020-02-22
2020-02-23  2020-03-28
2020-03-29  2020-04-25
2020-04-26  2020-05-23
2020-05-24  2020-06-27
2020-06-28  2020-07-25
2020-07-26  2020-08-22
2020-08-23  2020-09-26
2020-09-27  2020-10-24
2020-10-25  2020-11-21
2020-11-22  2020-12-26

【讨论】:

  • 我在看 API,有两件事我不明白。为什么要leapWeekInMonth 12,为什么是inLastWeekOf 而不是nearestEndOf?这些只是标准的会计惯例吗?我已经创建了年表(并转换了一些日期),但我有.leapWeekInMonth(2)。诚然,这是我第一次看到这个 API。
  • 我刚刚为leapWeekInMonth 选择了一个值。由您来选择您需要/想要的价值。 --- 尝试将 inLastWeekOf() 更改为 nearestEndOf() 并亲自查看差异。
  • 谢谢。我只是好奇你选择你所做的价值是否有原因。感谢回复。
  • @BasilBourque 我故意不将其设为链接,因为问题中已经提供了链接,但感谢您的编辑。
  • @Andreas 链接到 Javadoc 包页面的问题。我添加了 ThreeTen-Extra 项目页面的链接。我添加了更多链接来帮助指导初学者。并感谢您的出色回答,非常有帮助。
猜你喜欢
  • 2018-08-28
  • 2020-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-18
  • 2021-09-22
  • 2021-04-20
相关资源
最近更新 更多