【发布时间】:2013-10-18 18:18:09
【问题描述】:
假设我有一些账单,其中包含一些开始日期和结束日期。
Mar 10 to Apr 9
Apr 10 to May 9
May 10 to Jun 9
我要检查的业务规则是
for any given bill, the previous bill is exactly one period behind
例如,3 月 10 日到 4 月 9 日相隔大约一个月,因此我使用它来检查任何两个连续的账单开始日期(4 月 10 日与 3 月 10 日)相隔大约一个月。
现在我遇到的问题是获取期间的长度。例如,假设我有以下数据集
Jan 1 to Jan 31
Feb 1 to Feb 28
Mar 1 to Mar 31
我正在使用 JodaTime 库,所以我说类似
DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy");
DateTime date1 = formatter.parseDateTime("01/01/2013");
DateTime date2 = formatter.parseDateTime("31/01/2013");
System.out.println(Months.monthsBetween(date1, date2).toPeriod().getMonths());
返回 0,这是正确的,但没用。
DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy");
DateTime date1 = formatter.parseDateTime("31/01/2013");
DateTime date2 = formatter.parseDateTime("01/02/2013");
System.out.println(Months.monthsBetween(date1, date2).toPeriod().getMonths());
即使相隔一天,它也会返回 1。
有什么更好的方法来做到这一点?我可以检查天差,但由于计费周期是以月为单位指定的,我希望任何输出都是一致的(例如:这些账单不是相隔 x 个月等)
【问题讨论】:
-
无天未结账的情况怎么办?
toPeriod()是什么? -
@clwhisk 抱歉,您能举例说明您的意思吗?
-
我想我明白你的意思了。例如,如果一个时期是 1 月 1 日到 1 月 25 日,而下一个时期是 2 月 1 日到 2 月 25 日,并且它们仍然“有效”,因为不计算其间的缺失天数。
-
这不是我的意思——基本上和 dkatzel 一样。这些问题是关于你的意思。