基于java中的数据集时间块,使用日期保存时间范围



我需要将一组ArrayList数据转换为另一组ArrayNist数据。我需要将"原始数据"转换为下面的"需要的结果"。基本上,我有日期和时间的时间块,需要查看哪些数据集在同一日期的同一时间范围内并保存。不幸的是,算法真的不适合我。有什么想法吗?

日期是字符串。如果我之前没有澄清,我很抱歉。

selectedTimeSlotTracker data:
{
("2020-03-04",4,"10:00", "10:30"),
("2020-03-04",5,"10:30", "11:00"),
("2020-03-04",8,"12:00", "12:30"),
("2020-03-04",9,"12:30", "13:00"),
("2020-03-05",8,"12:00", "12:30"),
("2020-03-05",9,"12:30", "13:00")
}

summaryObjects:

{
("2020-03-04","10:00", "11:00"),
("2020-03-04","12:00", "13:00"),
("2020-03-05","12:00", "13:00")
}
private void transformSelectedToSummaryObjects(){
summaryObjects.clear();
int indexOfSummaryObjects = 0;
for (int i = 0; i < selectedTimeSlotTracker.size(); i++ ){
summaryObjects.add(new SummaryObject(selectedTimeSlotTracker.get(i).getDate(), selectedTimeSlotTracker.get(i).getStartTIme(), selectedTimeSlotTracker.get(i).getEndTime()));
for (int j = i; j < selectedTimeSlotTracker.size()-1; j++){
if (selectedTimeSlotTracker.get(j).getDate().equals(selectedTimeSlotTracker.get(j+1).getDate())){
if(selectedTimeSlotTracker.get(j).getEndTime().equals(selectedTimeSlotTracker.get(j+1).getStartTIme())) {
summaryObjects.get(indexOfSummaryObjects).setEndTime(selectedTimeSlotTracker.get(j+1).getEndTime());
i = j + 1;
}
}
}
indexOfSummaryObjects++;

}


courtReservationSummaryAdapter.notifyDataSetChanged();
}

这是我的尝试。不幸的是,它并没有创造干净的休息时间,只是把不同日期的结束时间拼凑成同一个日期。

下面是我用summaryObjects数组列表的方法得到的数据集,这是错误的。

{(2020-03-04,"10:00", "13:00")}

我几天后回来后会发布更多信息。

将日期部分解析为LocalDate

LocalDate ld = LocalDate.parse( "2020-03-04" ) ;

将一天中的时间值解析为LocalTime

LocalTime lt = LocalTime.parse( "10:00" ) ;

加入他们制作LocalDateTime

LocalDateTime ldt = LocalDateTime.of( ld , lt ) ;

通过调用isEqualisBeforeisAfter来比较LocalDateTime对象。提示:问"这个日期时间等于或在另一个日期时间之后吗?"的一种较短方法是问"这个时间不是在另一日期时间之前吗?"。

你应该能够算出其余的逻辑。理解java.time类使用不可变对象。因此,您将创建新实例,而不是修改现有对象。搜索堆栈溢出以了解更多信息,因为这一切已经处理了很多。

您甚至可能想要编写自己的小类,用一对LocalDateTime对象来表示时间跨度,这些对象的名称类似于LocalDateTimeSpan。要获得灵感,请查看ThreeTen Extra库及其Interval&CCD_ 11类。

最新更新