首页 > 解决方案 > 基于java中数据集时间块的日期保存时间范围

问题描述

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

日期是字符串。对不起,如果我之前没有澄清。

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 arraylist 方法得到的数据集,这是错误的。

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

当我回来时会发布更多信息。

标签: javaalgorithmsortingarraylistdata-transform

解决方案


将您的日期部分解析为LocalDate.

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

将您的时间值解析为LocalTime.

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

加入他们制作一个LocalDateTime.

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

LocalDateTime通过调用isEqualisBefore和比较您的对象isAfter。提示:询问“此日期时间是否等于或晚于另一个日期时间?”的更短的方式。是问“这个日期时间不是在另一个日期时间之前吗?”。

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

您甚至可能想编写自己的小类来用一对LocalDateTime对象表示时间跨度,命名为LocalDateTimeSpan. 如需灵感,请查看ThreeTen-Extra库及其IntervalLocalDateRange


推荐阅读