繁体   English   中英

如何计算定义了自定义财务日历的两个日期之间的月数?

[英]How to calculate number of months in between 2 dates having custom financial calendar defined?

我有定义自定义财务日历的场景。 有时一个月可能是 28 天,有时也可能是 35 天。 每个月的开始时间都不一样。 (可以从10/15/20th开始)

为了参考哪个日历日期指的是哪个财务日期,我定义了一个具有以下列结构的表: 财经日历

在上表中可以看到, fiscalmonth P1指的是日期 20190125。( fiscalmonth-P1是从20190115开始到20190215

该表在数据库中。 我正在研究 java 部分以创建功能,该功能将根据提供的两个会计日期(将参考上表的yyyymmdd列)返回Periodbetween对象以发挥作用。

public class PeriodBetween {

    private int days;
    private int weeks;
    private int months;
    private int quarters;
    private int years;
    //getters & setters
}

periodBetween对象提供有关这两个日期之间的天数/周数/月数/季度数的更多信息。 public PeriodBetween between(int startDate, int endDate)

我正在寻找一些东西来构建,比如 Java 的java.time.Period.between函数中的内容。 但是无法通过参考上面定义的表来获得我可以使用的最佳方法。

让我知道是否已经存在这样的东西,或者除了使用Financial Calendar表之外还有其他方法。

更新:有时日历出租车为 28 天或 35 天的情况取决于客户遵循哪个日历。 因此,根据客户的不同,将填充Financial Calendar Table

财政日历是不可预测的。 它将根据要求预先填充在表中。 是的, Fiscal Calendar Table遵循 52 周和 52 周的支持。 因此,为了让您有更高层次的想法,表格将根据客户使用的自定义日历类型进行填充。

我现在如何定义我的日历? 从客户那里获取他们希望如何定义日历的要求。 使用它,我正在填充上面提到的表格并在任何地方使用该表格。 因此,让我们在 Financial Calendar 上说,我想找出3rd day of P3 month on Financial year 2018 然后我对这张表的查询将是在这一天提取更多信息将是: select * from financial_calendar where fiscaldayofmonth=3 and fiscalmonth=P3 and fiscalyear=Financial Year 2018

我计算两个日期之间的月数的想法是使用两个日期的 between 子句从表中提取信息并将数据大小除以 30。这是不正确的。

AccountingChronology

Java 8 及更高版本中的java.time框架默认使用基于ISO 8601的年表。 但是,该年表是可插入的

捆绑了其他四个年表实现:Hijrah、Japanese、Minguo 和 ThaiBuddhist。 这些底层是java.time.chrono.Chronology接口和java.time.chrono.AbstractChronology类。

ThreeTen-Extra库为java.time添加了更多功能。 这包括提供更多的Chronology实现

其中之一是AccountingCalendar 此实现可能适合您的需求,具体取决于您如何定义会计日历(您在问题中忽略了记录)。 该年表旨在遵循IRS 出版物 538国际财务报告标准中规定的 52/53 周财政日历规则。

由于每个公司都可以使用日历定义这样的年表,因此我们需要AccountingChronologyBuilder来定义我们自己公司的定义。 使用构建器,我们指定:

  • 结束星期几 - 给定会计年度结束的星期几。
  • last-in-month vs.nearest-end-of-month - 一周的结束日期是本月的最后一天,还是最接近月末的日期(有时会在下个月。
  • 月末 - 年结束于/最接近的公历/ISO 月末。
  • 年划分 - 将会计年度划分为多少“月”(期间),以及每个月有多少周。
  • 闰周月 - 哪个月将添加闰“周”。 实际上,这可能是最后一个,但这似乎不是必需的。

然后,构建器对象生成一个AccountingChronology供我们在我们的应用程序中使用。

从那里我们可以生成AccountingDate对象。 这个类似乎有很多功能。 请注意此类上的方法, until 对于开始日期,您提供一个结束日期,并返回一个java.time.chrono.ChronoPeriod对象。 从中您可能能够获得会计月或会计周的计数。 我不确定,因为我从未使用这个会计年表做过任何工作。

仅供参考,此会计年表实现中似乎还涉及其他几个类: AccountingEraAccountingYearDivision

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM