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

How to know if a date range intersects with another date range in Java - Groovy

本问题已经有最佳答案,请猛点这里访问。

(P)Scenario 1:(p)

  • R1=02/08/2018-20/08/2018
  • (P)R2=06/08/2018-29/08/2018(p)字母名称

(P)Scenario 2:(p)

  • R1=02/08/2018-20/08/2018
  • (P)R2=31/08/2018-16/09/2018(p)字母名称

(P)There are two different date ranges,and I need to compare these ranges to find out if they intersection or not.For example,in the first scenario,the ranges intersection and in the second scenario they do not.The dates are in EDOCX1 English 0 Format.(p)(P)如果他们在十字路口或没有使用爪哇,什么是最好的方式?(p)字母名称


您可以在groovy 2.5中创建LocalDate实例的范围。范围(扩展iterables)有一个intersect方法,它返回两个范围之间重叠的天数集合。如果交叉点不是空的,您知道有重叠:

1
2
3
4
5
6
import java.time.*

def r1 = (LocalDate.of(2018, 8, 2)..LocalDate.of(2018, 8, 20))
def r2 = (LocalDate.of(2018, 8, 6)..LocalDate.of(2018, 8, 29))

def overlap = r1.intersect(r2) // returns a list containing August 6th through August 20th


bdkosher的答案看起来是正确的,它利用了groovy中漂亮的特性。

org.threeten.extra.LocalDateRange

如果在日期范围内做很多工作,您可能会发现threeten额外项目中的LocalDateRange类很有用。

该类提供了几种比较方法:abutscontainsenclosesequalsintersectionisBeforeisAfterisConnectedoverlapsspanunion

1
2
3
4
5
6
7
8
9
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 ) ;

关于JavaTimes

JavaTimeFr框架是在Java 8和之后构建的。这些类取代了麻烦的旧遗留日期时间类,如java.util.DateCalendarSimpleDateFormat

现在处于维护模式的joda time项目建议迁移到java.time类。

要了解更多信息,请参阅Oracle教程。以及搜索堆栈溢出以获得许多示例和解释。规格为JSR 310。

您可以直接与数据库交换java.time对象。使用符合JDBC 4.2或更高版本的JDBC驱动程序。不需要字符串,不需要java.sql.*类。

在哪里获取java.time类?

  • Java SE 8、Java SE 9、Java SE 10以及以后
    • 内置的。
    • 标准JAVA API的一部分与捆绑实现。
    • Java 9添加了一些小的特性和修复。
  • Java SE 6和Java SE 7
    • 大部分JavaTimeActudio都被移植到TealEnter后端的Java 6和7中。
  • 安卓
    • java.time类的Android包实现的更高版本。
    • 对于早期的Android(<26),threetenabp项目适应threeten backport(如上所述)。看看如何使用三连珠……

threeten额外项目使用额外的类扩展java.time。这个项目是将来可能添加到java.time的一个试验场。您可以在这里找到一些有用的类,如IntervalYearWeekYearQuarter等等。