4-4-5 бухгалтерский календарь в java - PullRequest
1 голос
/ 08 мая 2020

Мне нужно использовать бухгалтерский календарь 4-4-5 в java.

Я нахожу способ, с учетом указанной c даты текущего месяца, соответствующего расчетного месяца .

Например, для 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

Так, например, для даты 28 апреля мне нужно получить что-то вроде этого:

26-Apr  23-May

Я пробовал также использовать проект ThreeTen-Extra с AccountingChronology и AccountingChronologyBuilder. Но, честно говоря, мне сложно понять, как им пользоваться.

1 Ответ

2 голосов
/ 08 мая 2020

Достаточно легко получить эти даты с помощью библиотеки ThreeTen-Extra .

Определите свою хронологию. Создайте экземпляр AccountingChronology, используя AccountingChronologyBuilder. Укажите атрибуты, которые соответствуют вашей конкретной деловой практике. Обратите внимание, как мы указываем 4-4-5 через AccountingYearDivision.

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
...