如何计算定义了自定义财务日历的 2 个日期之间的月数?
How to calculate number of months in between 2 dates having custom financial calendar defined?
我有定义自定义财务日历的场景。有时一个月可以是 28 天,有时也可以是 35 天。
每个月的开始都不一样。 (可以从10/15/20开始)
为了引用哪个日历日期指的是哪个财务日期,我定义了一个 table,它具有以下列结构:
在上面table你可以看到fiscalmonth
P1
指的是日期20190125。(fiscalmonth-P1
可能是从20190115
至 20190215
此 table 在数据库中。我正在 java 部分创建功能,该功能将 return Periodbetween
对象基于提供的两个会计日期(将参考上面 [=53= 的 yyyymmdd
列]) 功能。
public class PeriodBetween {
private int days;
private int weeks;
private int months;
private int quarters;
private int years;
//getters & setters
}
此 periodBetween
对象提供了有关这两个日期之间的 days/weeks/months/quarters 数量的更多信息。
public PeriodBetween between(int startDate, int endDate)
我正在寻找可以构建的东西,例如 Java 的 java.time.Period.between
函数中的内容。但是无法通过参考上面定义的 table 来获得我可以使用的最佳方法。
让我知道是否已经存在这样的东西,或者除了使用 Financial Calendar
table.
之外还有其他方法
更新:
有时日历 cab 为 28 天或 35 天的情况是基于客户遵循的日历。因此,根据客户端的不同,Financial Calendar Table
将被填充。
财政日历不是预测的table。它将根据要求预先填充在 table 中。
是的,Fiscal Calendar Table
跟随 52 以及 52 周的支持。因此,为了让您有更高层次的想法,table 将根据客户使用的自定义日历类型进行填充。
我现在如何定义我的日历?
从客户那里获取有关他们希望如何定义日历的要求。我使用它来填充上面提到的 table 并在任何地方使用它 table 。
因此,假设在金融日历上我想找出什么是 3rd day of P3 month on Financial year 2018
。
那么我对这个 table 的查询将是提取更多关于这一天的信息:select * from financial_calendar where fiscaldayofmonth=3 and fiscalmonth=P3 and fiscalyear=Financial Year 2018
我计算两个日期之间的月数的想法是使用两个日期之间的子句从 table 中提取信息并将数据大小除以 30。这是不正确的。
AccountingChronology
java.time 框架在 Java 8 及更高版本中默认使用基于 ISO 8601. However, that chronology is pluggable 的年表。
捆绑了其他四个年表实现:Hijrah、Japanese、Minguo 和 ThaiBuddhist。这些是 java.time.chrono.Chronology
interface, and the java.time.chrono.AbstractChronology
class.
ThreeTen-Extra library adds more functionality to java.time. This includes providing several more Chronology
implementations。
其中之一是 AccountingCalendar
. This implementation may suit your needs depending on how you define your fiscal calendar (which you neglected to document in your Question). This chronology is designed to follow the 52/53 week fiscal calendar rules as laid down in IRS Publication 538 and the International Financial Reporting Standards。
由于这样的年表可以由每个公司使用日历来定义,所以我们需要 AccountingChronologyBuilder
来定义我们自己公司的定义。使用构建器,我们指定:
- 结束星期几 - 给定会计年度结束的星期几。
- 最后一个月与最近月底 - 结束星期几是当月的最后一天,还是最接近月底的(有时会在下个月。
- 月末 - 年末 in/is 最接近的 Gregorian/ISO 月末。
- 年份划分 - 将会计年度划分为多少 'months'(期间),每个期间有多少周。
- 闰周月 - 哪个月将添加闰月 'week'。实际上,这可能是最后一个,但这似乎不是必需的。
构建器对象然后生成一个 AccountingChronology
供我们在我们的应用程序中使用。
我们可以从那里生成 AccountingDate
objects. This class seems to have much functionality. Notice on this class the method until
. To the starting date you provide an ending date, and you get back a java.time.chrono.ChronoPeriod
对象。从中你可能能够得到你的会计月数或会计周数。我不确定,因为我从未使用此会计年表做过任何工作。
仅供参考,似乎还有其他几个 classes 参与此会计年表实施:AccountingEra
& AccountingYearDivision
。
我有定义自定义财务日历的场景。有时一个月可以是 28 天,有时也可以是 35 天。 每个月的开始都不一样。 (可以从10/15/20开始)
为了引用哪个日历日期指的是哪个财务日期,我定义了一个 table,它具有以下列结构:
在上面table你可以看到fiscalmonth
P1
指的是日期20190125。(fiscalmonth-P1
可能是从20190115
至 20190215
此 table 在数据库中。我正在 java 部分创建功能,该功能将 return Periodbetween
对象基于提供的两个会计日期(将参考上面 [=53= 的 yyyymmdd
列]) 功能。
public class PeriodBetween {
private int days;
private int weeks;
private int months;
private int quarters;
private int years;
//getters & setters
}
此 periodBetween
对象提供了有关这两个日期之间的 days/weeks/months/quarters 数量的更多信息。
public PeriodBetween between(int startDate, int endDate)
我正在寻找可以构建的东西,例如 Java 的 java.time.Period.between
函数中的内容。但是无法通过参考上面定义的 table 来获得我可以使用的最佳方法。
让我知道是否已经存在这样的东西,或者除了使用 Financial Calendar
table.
更新:
有时日历 cab 为 28 天或 35 天的情况是基于客户遵循的日历。因此,根据客户端的不同,Financial Calendar Table
将被填充。
财政日历不是预测的table。它将根据要求预先填充在 table 中。
是的,Fiscal Calendar Table
跟随 52 以及 52 周的支持。因此,为了让您有更高层次的想法,table 将根据客户使用的自定义日历类型进行填充。
我现在如何定义我的日历?
从客户那里获取有关他们希望如何定义日历的要求。我使用它来填充上面提到的 table 并在任何地方使用它 table 。
因此,假设在金融日历上我想找出什么是 3rd day of P3 month on Financial year 2018
。
那么我对这个 table 的查询将是提取更多关于这一天的信息:select * from financial_calendar where fiscaldayofmonth=3 and fiscalmonth=P3 and fiscalyear=Financial Year 2018
我计算两个日期之间的月数的想法是使用两个日期之间的子句从 table 中提取信息并将数据大小除以 30。这是不正确的。
AccountingChronology
java.time 框架在 Java 8 及更高版本中默认使用基于 ISO 8601. However, that chronology is pluggable 的年表。
捆绑了其他四个年表实现:Hijrah、Japanese、Minguo 和 ThaiBuddhist。这些是 java.time.chrono.Chronology
interface, and the java.time.chrono.AbstractChronology
class.
ThreeTen-Extra library adds more functionality to java.time. This includes providing several more Chronology
implementations。
其中之一是 AccountingCalendar
. This implementation may suit your needs depending on how you define your fiscal calendar (which you neglected to document in your Question). This chronology is designed to follow the 52/53 week fiscal calendar rules as laid down in IRS Publication 538 and the International Financial Reporting Standards。
由于这样的年表可以由每个公司使用日历来定义,所以我们需要 AccountingChronologyBuilder
来定义我们自己公司的定义。使用构建器,我们指定:
- 结束星期几 - 给定会计年度结束的星期几。
- 最后一个月与最近月底 - 结束星期几是当月的最后一天,还是最接近月底的(有时会在下个月。
- 月末 - 年末 in/is 最接近的 Gregorian/ISO 月末。
- 年份划分 - 将会计年度划分为多少 'months'(期间),每个期间有多少周。
- 闰周月 - 哪个月将添加闰月 'week'。实际上,这可能是最后一个,但这似乎不是必需的。
构建器对象然后生成一个 AccountingChronology
供我们在我们的应用程序中使用。
我们可以从那里生成 AccountingDate
objects. This class seems to have much functionality. Notice on this class the method until
. To the starting date you provide an ending date, and you get back a java.time.chrono.ChronoPeriod
对象。从中你可能能够得到你的会计月数或会计周数。我不确定,因为我从未使用此会计年表做过任何工作。
仅供参考,似乎还有其他几个 classes 参与此会计年表实施:AccountingEra
& AccountingYearDivision
。