【发布时间】:2019-12-30 17:03:31
【问题描述】:
我有定义自定义财务日历的场景。有时一个月可以是 28 天,有时也可以是 35 天。 每个月的开始时间都不一样。 (可以从10/15/20th开始)
为了引用哪个日历日期指哪个财务日期,我定义了一个具有以下列结构的表:
在上表中你可以看到fiscalmonthP1指的是日期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 周的支持。因此,为了让您有更高层次的想法,该表将根据客户使用的自定义日历类型进行填充。
我现在如何定义我的日历?
从客户那里获得他们希望如何定义日历的要求。使用它我正在填充上面提到的表格并在任何地方使用该表格。
所以让我们在财务日历上说我想找出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。这是不正确的。
【问题讨论】:
-
我不知道你在问什么,但
Period.between()本身使用LocalDate.until(),并且它没有native方法,所以一切都在该文件中。为了计算月差,它有效地计算两个日期的packedDate=(Y*12+M-1)*32+D,并为您提供(packedDate2-packedDate1)/32(整数除法)。 -
我已经自定义了在 DB 中的
Financial Calendar Table中定义的财务日历。因此,我必须使用参考表来计算两个yyyymmdd之间的月数。 -
应该提供一些具体的例子,预计什么日期会产生什么结果。我可以理解
28和35是可取的,因为它们是7的倍数,但是“有时这个有时那个”并不是一个很明确的定义。 -
您的会计日历是可预测的还是任意的?
-
我想知道,对于财务日历,是否可以实现 java.time 框架中使用的
Chronology接口。然后,您可以使用其余的 java.time 类,而无需重新发明轮子。 Java 附带AbstractChronology和五个实现(Hijrah、ISO 8601、日语、民国和 ThaiBuddhist。ThreeTen-Extra 库提供了另外九个,包括AccountingChronology每 IRS 出版物 538 和国际财务报告标准。
标签: java java-8 java-time fiscal