java计算两个日期之前的天数实例(排除节假日和周末)

下面是详细讲解计算两个日期之间天数的攻略:

1. 计算基本思路

  • 首先,获取两个日期的时间戳,可使用 java.util.Date 类的 getTime() 方法将日期转换为 Timestamp 形式。
  • 然后,将两个日期之间的时间戳相减,得到两个日期之间的毫秒数差。
  • 最后,将毫秒数差转换为天数,并排除掉节假日和周末。

2. 排除节假日和周末

排除掉节假日和周末,有多种实现方法,下面介绍两种:

使用 Calendar 类实现

通过 Calendar 类,可以很方便地判断日期是否为周末或节假日。具体操作步骤:

  1. 获取两个日期之间所有的日期;
  2. 遍历每个日期,判断是否为周末或节假日,如果是,则将该日期从天数统计中排除掉。
public static int getWorkDays(Date startDay, Date endDay) {
    int workDays = 0;
    Calendar cal = Calendar.getInstance();
    cal.setTime(startDay);
    while (cal.getTimeInMillis() <= endDay.getTime()) {
        if (cal.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY
                && cal.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY
                && !isHoliday(cal)) {
            workDays++;
        }
        cal.add(Calendar.DAY_OF_MONTH, 1);
    }
    return workDays;
}

public static boolean isHoliday(Calendar cal) {
    // 判断是否为节假日
    // TODO: 自行实现节假日列表和判断逻辑
}

使用工具类实现

如果不想自己实现节假日列表和判断逻辑,可以使用第三方工具类,比如 chholidays 工具类,该工具类已经包含了 2021 年至 2030 年所有的节假日列表。

public static int getWorkDays(Date startDay, Date endDay) {
    int workDays = 0;
    while (startDay.getTime() <= endDay.getTime()) {
        if (CHHolidays.isWorkday(startDay)) {
            workDays++;
        }
        startDay.setTime(startDay.getTime() + 24 * 3600 * 1000);
    }
    return workDays;
}

3. 示例演示

下面演示两个示例,分别使用上面介绍的两种方法实现计算两个日期之间的天数,排除掉节假日和周末。

使用 Calendar 类实现

public static void main(String[] args) throws ParseException {
    String startTime = "2023-01-01";
    String endTime = "2023-02-01";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

    Calendar cal = Calendar.getInstance();
    Date startDay = sdf.parse(startTime);
    Date endDay = sdf.parse(endTime);

    int workDays = getWorkDays(startDay, endDay);
    System.out.println("工作日天数:" + workDays);
}

使用工具类实现

public static void main(String[] args) throws ParseException {
    String startTime = "2023-01-01";
    String endTime = "2023-02-01";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

    Date startDay = sdf.parse(startTime);
    Date endDay = sdf.parse(endTime);

    int workDays = getWorkDays(startDay, endDay);
    System.out.println("工作日天数:" + workDays);
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java计算两个日期之前的天数实例(排除节假日和周末) - Python技术站

(1)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Spring开发核心之AOP的实现与切入点持久化

    Spring开发核心之AOP的实现与切入点持久化 什么是AOP 将一个大的功能划分为小的功能单元,然后将这些小的功能进行组合,就构成了一个完整的大功能。在划分功能单元的时候,要考虑到它们的通用性。这种技术称为模块化设计,也称为面向切面编程(AOP) AOP的实现 Spring中AOP的实现主要是通过动态代理的方式来实现的。Spring可以为普通的类以及接口生…

    Java 2023年5月20日
    00
  • Spring Native项目实战(体验79毫秒启动springboot应用)

    Spring Native是Spring Boot的一个扩展,它可以将Spring Boot应用程序编译成本地可执行文件,从而提高应用程序的启动速度和性能。在本攻略中,我们将详细介绍如何使用Spring Native,并提供两个示例来说明其用法。 以下是两个示例,介绍如何使用Spring Native: 示例一:使用Spring Native编译Spring…

    Java 2023年5月15日
    00
  • Spring Data Jpa实现自定义repository转DTO

    针对这个话题,我提供以下完整攻略,包括两条示例说明。 Spring Data Jpa实现自定义repository转DTO 背景 在实际开发中,通常需要将领域模型(Entity)转换成数据传输对象(DTO)输出给客户端。如果每个DTO都手动转换一次,那么会导致大量的重复代码和工作量,因此我们需要一个高效的方式来完成这个任务。本文介绍如何通过Spring Da…

    Java 2023年6月3日
    00
  • Unicode编码大揭秘

    首先让我们来了解一下“Unicode编码大揭秘”。 Unicode编码大揭秘 Unicode是一种字符编码标准,它定义了数字与字符之间的对应关系。Unicode编码包含了世界上几乎所有的字符,包括各国文字、标点符号、特殊符号等等,使得不同的计算机系统和软件可以正确地保存、传输和显示文本。 Unicode编码方案 Unicode编码有多种方案,例如UTF-8(…

    Java 2023年5月20日
    00
  • Spring打包jar包时jsp页面无法访问问题解决

    针对Spring打包jar包时jsp页面无法访问的问题解决,可以依照以下步骤进行操作: 问题解析 在Spring项目中,我们在开发过程中经常使用jsp页面进行开发和展示,当我们将Spring项目打包成jar包并进行部署时,就会出现jsp页面无法访问的问题。原因是嵌入式Web服务器默认不支持jsp引擎。 解决步骤 步骤一:添加插件和依赖 在Spring项目的p…

    Java 2023年6月15日
    00
  • Java 内省(Introspector)深入理解

    Java 内省(Introspector)深入理解攻略 什么是Java内省(Introspector) Java内省是指可以在运行时检查一个JavaBean的属性、方法和事件利用JavaBean的内省机制,我们可以在访问一个对象的属性时调用一些预定义的方法,从而更方便的操作对象。Java提供了一个Introspector类,通过该类我们可以取得某个JavaB…

    Java 2023年6月15日
    00
  • Java8中stream和functional interface的配合使用详解

    下面我将给出一个详细讲解“Java8中stream和functional interface的配合使用”的攻略: 一、什么是stream和functional interface 1.1 stream 在Java中,Stream是Java 8提供的一个新特性。Stream提供了一种更便捷的方式来处理集合数据,可以实现很多操作,比如过滤,排序和统计等。Stre…

    Java 2023年5月26日
    00
  • Spring Boot 接口加解密,新姿势来了!

    1. 介绍 在我们日常的Java开发中,免不了和其他系统的业务交互,或者微服务之间的接口调用 如果我们想保证数据传输的安全,对接口出参加密,入参解密。 但是不想写重复代码,我们可以提供一个通用starter,提供通用加密解密功能 2. 前置知识 2.1 hutool-crypto加密解密工具 hutool-crypto提供了很多加密解密工具,包括对称加密,非…

    Java 2023年4月17日
    00
合作推广
合作推广
分享本页
返回顶部