当前位置: 首页 > 知识库问答 >
问题:

检测一个时间段是否被其他时间段覆盖的算法

彭仲卿
2023-03-14

我的目标很简单:我有一个包含结束日期和开始日期的对象列表。我需要找到未覆盖的时间段,并根据这些时间段创建一个新对象(每个发现的孔的开始日期为第1天,结束日期为第1天)。

假设我的第一个列表中有6个对象,如下所示:

对象1:开始日期:2022-01-01/结束日期2022-01-03

对象2:开始日期:2022-01-08/结束日期2022-01-18

对象3:开始日期: 2022-02-11/结束日期2022-02-19

对象4:开始日期: 2022-02-22/结束日期2022-02-25

对象5:开始日期:2022-02-17/结束日期2022-03-10

对象6:开始日期: 2022-03-18/结束日期2022-03-25

我需要生成以下三个对象:

第一期:开始日期:2022-01-04/结束日期2022-01-07

第二阶段:开始日期:2022-01-19/结束日期2022-02-10

三期:开始日期:2022-03-11/结束日期2022-03-17

你认为我应该怎么做,使用Java8和LocalDate对象?

共有1个答案

解阳泽
2023-03-14

我会使用一个Period对象来实现Comparable接口来订购ArrayList

public Period implements Comparable {
  LocalDate startDate;
  LocalDate endDate;
  //getters and setters, constructors...
  public compareTo(Object obj) { //override
    //type checks...
    return this.startDate.compareTo(((Period) obj).getStartDate());
  }
}

然后,我会在有序列表中循环查找是否存在漏洞:

public ArrayList<Period> findHoles(ArrayList<Period> periods) {
  //Collection.sort(periods) if it isn't ordered
  ArrayList<Period> holes;
  Period currentPeriod = periods.get(0);
  for (Period period : periods) {
    LocalDate holeStart = currentPeriod.getEndDate().plusDays(1);
    LocalDate holeEnd = period.getStartDate().minusDays(1);
    if (holeStart.isBefore(holeEnd)) {
      holes.add(new Period(holeStart,holeEnd));
    }
    if (currentPeriod.getEndDate().isBefore(period.getEndDate())) {
      currentPeriod = period;
    }
  }
  return holes;
}

 类似资料:
  • 我的用例——我是一名医生。在某一天,我可以工作几个小时,但有些时间不可用。我想创建一个对象“周期我的工作日”。当有人预约上午8点到9点(即“周期病人1预约”)时,该时段将从我的工作日“删除”。当新患者访问myWorkDay时,他只看到myWorkDay-病人1约会。如果病人1释放了他的时隙,那么新患者会看到完整的myWorkDay。 有可能使用JodaTime做到这一点吗? 有一个额外的要求是不必

  • 我在项目中使用Crudepository进行数据库操作。当我使用由Spring实现的保存方法更新持久化数据时,其他字段将被覆盖。例如,我只发送firstName进行更新,但lastName被转换为空字段。 简单地说,我用这样的实体调用保存方法: 我正在将此JSON发送到更新方法: Spring 将此 JSON 转换为 Rest api endpoint的成员。成员.java是: 如何防止覆盖其他字

  • 在Ruby on Rails中,有一个特性允许您使用任何日期并打印出它是多么“久远”。 例如: 在Java有什么简单的方法可以做到这一点吗?

  • 我正在开发一个spring api,在这个api中我使用postgres并保存一个timestamp类型的字段,字段名为。现在我想检查这个字段是否在两个不同的时间戳之间。 现在我正在使用这个: 是否可以在之间使用

  • 问题内容: 这可能是一个重复的问题,但我没有找到想要的东西。我在UI活动中调用AsyncTask, 在doInBackground中调用需要时间的方法。如果一段时间后没有返回数据,我想中断该线程。以下是我尝试执行此操作的代码。 但这并不能在30秒后停止任务,事实上,这花费了更多时间。我也尝试过,但这也不起作用。 谁能告诉我该怎么做或如何在doInBackground中使用isCancelled()

  • 本文向大家介绍PHP间隔一段时间执行代码的方法,包括了PHP间隔一段时间执行代码的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP间隔一段时间执行代码的方法。分享给大家供大家参考。具体分析如下: PHP如何设置每隔一段时间自动执行某段代码?例如定时生成静态文件之类的,这就需要设置休眠时间,即每隔一段时间程序就会调用某段代码. 代码如下: 希望本文所述对大家的PHP程序设计有所帮助