如何知道日期范围是否与Java中的另一个日期范围相交-Groovy

时间:2018-08-06 15:06:33

标签: java date groovy

方案1:

  • R1 = 02/08/2018-20/08/2018
  • R2 = 06/08/2018-29/08/2018

     R1   |--------------|
     R2          |---------------------|
    

方案2:

  • R1 = 02/08/2018-20/08/2018
  • R2 = 31/08/2018-16/09/2018

     R1   |--------------|
     R2                     |---------------------|
    

有两个不同的日期范围,我需要比较这些范围以了解它们是否相交。例如,在第一种情况下,范围相交,而在第二种情况下,范围不相交。日期采用dd/MM/yyyy格式。

确定它们是否使用Java相交的最佳方法是什么?

       def R1Initial = SDF.parse(u.effectiveStartDate.text())
       def R1End = SDF.parse(u.mdfSystemEffectiveEndDate.text())
       def R2Initial = SDF.parse(u.effectiveStartDate.text())
       def R2End = SDF.parse(u2.mdfSystemEffectiveEndDate.text())
       def intersects = ?????

2 个答案:

答案 0 :(得分:4)

您可以创建ranges of LocalDate instances in Groovy 2.5。范围(扩展Iterable)的范围为intersect method,它返回两个范围之间的重叠天的集合。如果交集为非空,则说明存在重叠:

-webkit-animation: fadeInRight 0s ease forwards;

答案 1 :(得分:0)

Answer by bdkosher看起来很正确,利用了Groovy中的漂亮功能。

org.threeten.extra.LocalDateRange

如果在日期范围上做很多工作,您可能会在LocalDateRange项目中的ThreeTen-Extra类中找到帮助。

该类提供了几种比较方法:abutscontainsenclosesequalsintersectionisBefore,{{1 }},isAfteroverlapsisConnectedspan

union

关于 java.time

java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendarSimpleDateFormat

目前位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要LocalDateRange r1 = LocalDateRange.of( LocalDate.of( 2018, 8 , 2 ) , LocalDate.of( 2018 , 8 , 20 ) ) ; LocalDateRange r2 = LocalDateRange.of( LocalDate.of( 2018 , 8 , 6 ) , LocalDate.of( 2018 , 8 , 29 ) ) ; boolean overlaps = r1.overlaps( r2 ) ; 类。

在哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展了java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore