java - 检查日期是否早于 x 天(仅限工作日)

标签 java date java-8 localdate zoneddatetime

public class App {

    public static void main(String[] args) {
        final String cobDate = "2021-04-08";
        final String recordDate = "2020-12-01";
    }

    public static ZonedDateTime getDate(String date, DateTimeFormatter formatter) {
        LocalDate localDate = LocalDate.parse(date, formatter);
        return localDate.atStartOfDay(ZoneId.of(ZoneOffset.UTC.getId()));
    }
}

我正在使用 java 8,我想检查 recordDate 的年龄是否大于5天。但不是从今天开始,而是比 cobDate 早 5 天?我怎样才能实现这个,也许通过使用我已经存在的实用程序方法返回 ZoneDateTime ?它应该排除周末(例如周六和周日)并且只考虑工作日。

一些场景:

cob日期:08/04/2021 记录日期:08/04/2021 ==> false >> 不超过 5 天

cob日期:08/04/2021 记录日期:31/03/2021 ==> true>> 超过 5 天

cob日期:08/04/2021 记录日期:02/04/2021 ==> false >> 不超过 5 天

最佳答案

private static long countBusinessDaysBetween(LocalDate startDate, LocalDate endDate) 
    {
        if (startDate == null || endDate == null) {
            throw new IllegalArgumentException("Invalid method argument(s) to countBusinessDaysBetween(" + startDate
                    + "," + endDate);
        }

        if (startDate.isAfter(endDate)) {
           throw new IllegalArgumentException("Start Date must be before End Date");
        }
 
        Predicate<LocalDate> isWeekend = date -> date.getDayOfWeek() == DayOfWeek.SATURDAY
                || date.getDayOfWeek() == DayOfWeek.SUNDAY;
 
        long daysBetween = ChronoUnit.DAYS.between(startDate, endDate);
 
        long businessDays = Stream.iterate(startDate, date -> date.plusDays(1)).limit(daysBetween)
                .filter(isWeekend.negate()).count();
        return businessDays;
    }

摘自一篇非常好的文章,我刚刚删除了假期检查并添加了一个约束,即 endDate 必须始终晚于 startDate

calculate business days

那么你就可以这样做

public boolean isOlderThanXDays(int xDays, LocalDate startDate, LocalDate endDate) {
      return (YourClassName.countBusinessDaysBetween(startDate, endDate) > xDays)
  }

关于java - 检查日期是否早于 x 天(仅限工作日),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67001835/

相关文章:

java - 如何从 Spring messageSource 手动重新加载属性文件

java - 通过java捕获RTP

java - 将字符串转换为 Java.sql.Date

postgresql - 使用 postgres 表序列而不是共享 hibernate_sequence

Java重播日志,诊断内存不足错误

java - 如何在 Collections.forEach() 中打印计数

java - 如何根据类别从List(复杂数据类型)中取出前10条记录?

java - 使用 Hibernate 和 JPA 持久化 JSON 对象

node.js - 如何在 mongoDB 集合中分别保存日期和时间?

php - 使用 PHP 从缩写日期中删除前导零