首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >4-4-5会计日历( java )

4-4-5会计日历( java )
EN

Stack Overflow用户
提问于 2020-05-08 16:09:18
回答 1查看 351关注 0票数 1

我得用爪哇的4-4-5会计日历。

我正在寻找一种方法,给定一个具体的日期,当月,相应的会计月份。

例如,在2020年,我将有这样的会计月:

代码语言:javascript
复制
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日的日期,我需要收到这样的信息:

代码语言:javascript
复制
26-Apr  23-May

我还尝试在AccountingChronology an AccountingChronologyBuilder中使用AccountingChronology项目。但是,真诚地说,我很难理解如何使用它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-08 16:54:58

使用https://www.threeten.org/threeten-extra/库可以很容易地获得这些日期。

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

代码语言:javascript
复制
AccountingChronology acctChrono = new AccountingChronologyBuilder()
        .endsOn(DayOfWeek.SATURDAY)
        .inLastWeekOf(Month.DECEMBER)
        .withDivision(AccountingYearDivision.QUARTERS_OF_PATTERN_4_4_5_WEEKS)
        .leapWeekInMonth(12)
        .toChronology();

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

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

输出

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61683303

复制
相关文章

相似问题

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