【问题标题】:LocalDate comparison, getting orders between two datesLocalDate 比较,获取两个日期之间的订单
【发布时间】:2018-11-06 21:27:35
【问题描述】:
    public List<WorkItem> getWorkItemsByDate(String startDate, String endDate) throws ParseException {
    LocalDate parsedStartDate = LocalDate.parse(startDate);
    LocalDate parsedEndDate = LocalDate.parse(endDate);
    return workItemRepository.findAll().stream().filter(w -> w.getUpdateDate().isAfter(parsedStartDate) &&
                                                w.getUpdateDate().isBefore(parsedEndDate))
                                                .collect(Collectors.toList());
}

我有两个要比较的日期,并找到日期的所有工作项(具有 LocalDate)。 我有一个问题,但我不知道如何检查同一日期。 当您在我的代码中运行日期时,它可以正常工作,直到您写下该项目的创建日期,然后它就不起作用了。

我如何使用 2018-05-28 - 2018-05-28 进行这项工作,如果项目是在这一天创建的,它将无法在我的 lambda 中工作。

【问题讨论】:

    标签: java hibernate jpa localdate


    【解决方案1】:

    我通常使用“not before”作为“on or after”的简写方式。反之亦然:

        w -> ! w.getUpdateDate().isBefore(parsedStartDate)
                && ! w.getUpdateDate().isAfter(parsedEndDate)
    

    根据口味,您当然可以使用更罗嗦但也更直接的方式

        w -> (w.getUpdateDate().isEqual(parsedStartDate) || w.getUpdateDate().isAfter(parsedStartDate))
                && (w.getUpdateDate().isBefore(parsedEndDate) || w.getUpdateDate().isEqual(parsedEndDate))
    

    【讨论】:

      【解决方案2】:

      如果当天是同一天,那么它既不是之前也不是之后,所以在这些情况下它会返回 false。

      您可以将isAfterisBefore 替换为对compareTo 的调用,并检查int 返回值。代码不太清楚,但仍然可以理解。

      .filter(w -> w.getUpdateDate().compareTo(parsedStartDate) >= 0 && w.getUpdateDate().compareTo(parsedEndDate) <= 0)
      

      【讨论】:

        猜你喜欢
        • 2016-11-08
        • 2012-05-30
        • 1970-01-01
        • 1970-01-01
        • 2014-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多