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

获取最接近临时日期的日期

西门胜涝
2023-03-14

我有两个日期字段:

开始日期(2021-03-07T07:37:15)和结束日期(2021-03-07T07:37:25)和临时日期(2021-03-07T07:37:20)

我有一个列表,其中我在开始日期和结束日期之间返回了6条记录。我如何过滤记录并返回最接近临时日期的日期时间?

示例记录中,我需要获得第二条记录,因为2021-03-07T07:37:19.999与临时日期相近。实例

    2021-03-07T07:37:15.000
    2021-03-07T07:37:19.999
    2021-03-07T07:37:20.000
    2021-03-07T07:37:20.809
    2021-03-07T07:37:22.100
    2021-03-07T07:37:22.814
     public RequiredRecord findCloseRecord(List<RequiredRecord > list,  Date tempDate) {
Date startTime  = new Date(tempDate.getTime() - 5000);  
    Date endTime = new Date(tempDate.getTime() + 5000);
          Log.logInfo(this, "Find close record");
          if (list != null && !list.isEmpty()) {
               List<RequiredRecord > filteredRec = list.stream()
                         .filter(rec -> (rec.getLogRecDateTime() != null ))
                         .sorted(Comparator.comparing(RequiredRecord ::getLogRecDateTime))
                         .collect(Collectors.toList());    
          
               if (!ClrUtils.isCollectionEmpty(filteredRec)) {
                    return (RequiredRecord ) (filteredRec);
               }
          }
          return null;
     }

共有1个答案

陆俭
2023-03-14

您可以提供比较器来比较相关日期和临时日期的绝对差异。

public RequiredRecord findCloseRecord(List<RequiredRecord> list, Date tempDate) {
        if (list == null || list.isEmpty()) return null;
        
        return list.stream()
                .min(Comparator.comparingLong(d -> Math.abs(tempDate.getTime() - d.getLogRecDateTime().getTime())))
                .orElse(null);
}

我不确定你需要什么逻辑来确定开始和结束日期。但我想你可以根据你的要求改变逻辑。

 类似资料:
  • 问题内容: 给定此基准日期: 我想在列表中找到一个包含最接近日期的元组,但是它不能是更早的日期。 所以这里的输出应该是(它不能是第三个元组,因为那里的日期早于基准日期) 我的问题是,是否存在用于此类日期比较的任何模块?我试图先将所有数据更改为格式,然后进行比较,但是我的代码变得很丑陋,而且切片很多。 @编辑: 要测试的大清单: 要测试的大清单: 问题答案: 将日期转换为datetime对象,所以现

  • 问题内容: 我需要从MySQL表中获取与当前日期最接近的日期。 这是我的桌子: 因此,如果查询今天运行,它将返回 任何帮助深表感谢。谢谢 问题答案:

  • 问题内容: 我正在尝试获取SQL Server 2008中的最新星期五。 我有这个。它获取一周的开始时间(星期一),然后减去3天即可得出星期五。 在一周中运行此命令时,它将获得上周五的正确日期。但是,在星期五(或星期六)运行时,它仍然是上周的日期,而不是当前星期的星期五。我将使用if / else条件,但是我敢肯定有一种更简单的方法。 问题答案: 这适用于以下任何输入和任何设置: 通过将工作日值调

  • 问题内容: 我在Postgres 9.3数据库中有一个方案,在该方案中,我必须获取出售书籍的最近10个日期。考虑以下示例: table中目前没有任何限制,但是我们有一项服务,每天只插入一个计数。 我必须获得基于的结果。当我传递ID时,应使用书名,出售日期和出售份数生成报告。 所需的输出: 问题答案: 这看起来并不令人怀疑,但这 是个难题 。 假设条件 你的数目是。 表格中的所有列均已定义。 该表在

  • 问题内容: 例如,我有2个时间表:T1 和T2 我需要从T1获取最接近T2的时间。这些表之间没有关系。应该是这样的: 但是我不明白。有什么建议? 问题答案: 我相信这是您要查找的查询: 确保时间列具有相同的日期部分,否则t2.time-t1.time部分将无法正常工作。 编辑 :感谢您的接受,但本的下面的答案是更好。它使用Oracle分析功能,性能会更好。

  • 问题内容: 这篇文章几乎为我回答了这个问题,但是我有特定的需求,没有找到我想要的东西。这就是我的经验。我无法完全绕开它,所以我真正需要的只是指向正确方向的一个点。 假设我有一个如下数组: 我想有一种方法来提供日期(例如“ 2013-02-04 14:11:16”),并有一个函数确定数组中与此日期最接近的匹配项(即为“ 2013-02” -0516:25:07“)。 我将不胜感激任何提示。谢谢!:)