当前位置: 首页 > 知识库问答 >
问题:

比较日期周期和日期周期长度

郁景龙
2023-03-14

假设我有一些账单,上面有开始日期和结束日期。

Mar 10 to Apr 9
Apr 10 to May 9
May 10 to Jun 9

我要检查的商业规则是

对于任何给定的账单,前一个账单正好落后一个周期

例如,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个月分开的,等等)

共有2个答案

拓拔稳
2023-03-14

如果切换到使用特定时刻(DateTime对象)而不是LocalDate对象,则可以使用Interval类跟踪开始和停止时刻的时间跨度。如果你这样做的话,有一个提示:DateTime::withTimeAtStartOfDaymethod。

Interval类有方便的比较方法,例如邻接间隙重叠,以及包含。第一个,紧挨着,就是你要找的东西。

如果你想坚持使用LocalDate对象,你可以构建你自己的DateRange类来实现类似于Interval的行为。您甚至可以在这里找到一些关于堆栈溢出的示例代码

顺便说一句,Joda Time项目现在处于维护模式,团队建议迁移到java。时间课。爪哇。课时延长了“三个十”额外项目。该项目提供了一个类似于Joda TimeInterval类。

韦望
2023-03-14

为什么不直接检查一期的开始日期减去一天等于上一期的结束日期呢?

LocalDate endDate1, startDate2...

startDate2.minusDays(1).equals(endDate1)
 类似资料:
  • 我有一个rails生成的日期和一个jQuery生成的日期。 导轨日期打印如下: jQuery日期打印如下: 我想检查jQuery日期是大于还是小于rails日期。但是不管日期如何,jQuery日期总是被解释为比rails日期大。 为什么会这样,我怎样才能成功地比较这两个日期? 更新: 事实上,我刚刚发现问题在于它只允许1969年之前的日期。我打算代码只允许18岁以上的日期。有人知道为什么不同吗?

  • 所以今年早些时候,我在大学里接到了一个任务。任务是使用OOP程序创建一个停车场管理系统。例如,我们学习了如何使用继承、抽象类和实例。我已经完成了并通过了这个作业,所以这个问题只是为了知识目的。其中一个任务是按时间顺序对对象的 Array 列表进行排序。为此,我们学习了可比/比较器方法。但是,我无法理解它,也无法做到这一点。问题是,我们必须对数组列表中的“Vehicle”对象中的“DateTime”

  • 我正在寻找确切的开始和结束日期根据我们的桌面日历,如果我给周,年作为输入。但是上面的代码给出的输出是2009年1月27日星期日。我知道这是因为按照我们的说法,一周的第一天默认是星期天,但我需要按照桌面日历

  • 目前,我正努力争取与之相比的约会。更重要的是,我有一个属性Death的人,格式是YYYY-MM-DD,如果这个人已经死了(Death 我尝试了以下做法: 但我只收到来自浏览器的解析错误。我使用的是XSL1.0版,除了xmlns:XSL=“http://www.w3.org/1999/XSL/transform”之外,没有任何名称空间。

  • 问题内容: 假设我有个约会2013年6月20日 如何获取上周的日期范围,即本例中的6月9日至6月15日。 另外,如果日期是2013年6月2日 范围应该是5月26日至6月1日 问题答案: 这是基于Java日历的解决方案 输出 它已本地化,在我的“语言环境”周中,从星期一开始

  • 问题内容: 我们有一个实用程序,它将在周一至周五之间的任何一天运行。它将在内容管理工具中更新一些文件。与该文件关联的最后修改日期应该是该周的星期一日期。我编写了以下程序来检索当前周的星期一日期。但是我仍然不确定这是否适用于所有情况。有谁有更好的解决方案? 问题答案: 我强烈建议您改用Joda Time(对于您的所有日期/时间工作,而不仅限于此): 请注意,正如您在此处所使用的 星期一 (即Joda