方案1:
R2 = 06/08/2018-29/08/2018
R1 |--------------|
R2 |---------------------|
方案2:
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 = ?????
答案 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类中找到帮助。
该类提供了几种比较方法:abuts
,contains
,encloses
,equals
,intersection
,isBefore
,{{1 }},isAfter
,overlaps
,isConnected
和span
。
union
java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和SimpleDateFormat
。
目前位于Joda-Time的maintenance 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中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如Interval
,YearWeek
,YearQuarter
和more。