gpt4 book ai didi

Java重叠日期

转载 作者:太空宇宙 更新时间:2023-11-04 06:18:02 26 4
gpt4 key购买 nike

我有一个编程练习,它寻找重叠的日期范围。

到目前为止,这就是我所做的:

  private static final SimpleDateFormat dateFormat = new SimpleDateFormat("MMM dd, yyyy");
private static final Date invalidDate = new Date(0);

private static final Date fromString( String spec ) {
try {
return dateFormat.parse( spec );
} catch( ParseException dfe ) {
return invalidDate;
}
}

public static void main(String[] args) {

Date [] randomDates = {
fromString("Aug 28, 2014"),
fromString("Sep 1, 2014"),
fromString("Aug 30, 2014"),
fromString("Sep 3, 2014"),
fromString("Sep 5, 2014"),
fromString("Sep 7, 2014")
};

for( Date date: randomDates ) {
print( date );
}

}

private static final void print( Date date ) {
if( date == invalidDate ) {
System.out.println("Invalid date");
} else {
System.out.println( dateFormat.format( date ) );
}
}

但我似乎无法弄清楚日期的重叠。或者我仍然不知道如何找到重叠的日期。有任何想法吗?我们将非常感谢您的帮助。

最佳答案

要检查重叠的日期范围,您可以使用 JodaTime

DateTime currentdate1 = DateTime.now(); //first Date range
DateTime endDate1 = now.plusHours(10);

DateTime currentdate2 = now.plusDays(5); //second Date range
DateTime endDate2 = now.plusDays(6);

Interval interval1 = new Interval( currentdate1, endDate1 );
Interval interval2 = new Interval( currentdate2, endDate2 );

System.out.println( interval1.overlaps( interval2 ) );

编辑:-

由于您不想使用外部库,因此可以使用.compareTo()日期并尝试实现以下条件:-

( currentdate1 <= endDate2 and currentdate2 <= endDate1 )

示例:-

if( (currentdate1.compareTo(endDate2)<=0) && (currentdate2.compareTo(endDate1)<=0) ){
//ranges overlap
}

由于您想比较单个日期并检查它是否存在于指定的范围内,因此您可以执行以下操作:-

| Daterange start------Your Date------ DateRange ends|

因此:-

for(Date date:randomDates){
//check if the date in in the range
if( (DateRangeStart.compareTo(date)<=0) && (date.compareTo(DateRangeEnd)<=0)){
//date overlaps
System.out.println(dateFormat.format(date));
}
}

编辑:- 更新答案以包括聊天中讨论的问题的解决方案

outerloop: for (int i = 0; i < (dates.length - 1); i = i + 2) {
Date currentdate1 = dates[i];
Date endDate1 = dates[i + 1];

for (int j = i + 2; j < dates.length - 1; j = j + 2) {
Date currentdate2 = dates[j];
Date endDate2 = dates[j + 1];

if ((currentdate1.compareTo(endDate2) <= 0)
&& (currentdate2.compareTo(endDate1) <= 0)) {
System.out.println("Overlapping found:-");
print(currentdate2);
print(endDate2);
break outerloop;

}
}
}

关于Java重叠日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27813921/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com