[英]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
来定义我们自己公司的定义。 使用构建器,我们指定:
然后,构建器对象生成一个AccountingChronology
供我们在我们的应用程序中使用。
从那里我们可以生成AccountingDate
对象。 这个类似乎有很多功能。 请注意此类上的方法, until
。 对于开始日期,您提供一个结束日期,并返回一个java.time.chrono.ChronoPeriod
对象。 从中您可能能够获得会计月或会计周的计数。 我不确定,因为我从未使用这个会计年表做过任何工作。
仅供参考,此会计年表实现中似乎还涉及其他几个类: AccountingEra
和AccountingYearDivision
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.