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日

相关文章

  • Java内存溢出的几个区域总结(注意避坑!)

    Java内存溢出的几个区域总结(注意避坑!) 在Java应用程序中,如何管理和控制内存使用是非常重要的。Java虚拟机管理内存的方式不同于C++或其他语言,因为Java虚拟机使用堆区域来分配内存,并且具有垃圾回收机制。然而,这些不同也使得Java应用程序容易遭遇内存溢出错误。在这篇文章中,我们将概述Java中主要的内存区域,如何避免内存泄漏和内存溢出错误。 …

    Java 2023年5月27日
    00
  • Eclipse开发Hibernate应用程序

    Eclipse开发Hibernate应用程序攻略 Hibernate是一种流行的,开源的ORM(对象关系映射)框架,能够映射Java类到数据库表,使操作数据库更方便快捷。那么如何在Eclipse中使用Hibernate进行开发呢?下面是详细的攻略: 步骤一:创建Hibernate项目 打开Eclipse,点击File -> New -> Othe…

    Java 2023年5月20日
    00
  • SpringBoot整合Spring Data JPA的详细方法

    Spring Boot整合Spring Data JPA的详细方法 Spring Data JPA是Spring Framework的一部分,它提供了一种方便的方式来访问和操作数据库。在Spring Boot应用程序中,可以使用Spring Data JPA来简化数据库访问。本文将详细介绍Spring Boot整合Spring Data JPA的详细方法,包…

    Java 2023年5月15日
    00
  • Java诊断工具的作用是什么?

    Java诊断工具是用于分析和调试Java应用程序性能及问题的工具。其主要作用包括: 监控Java应用程序的运行状况。 分析Java应用程序的性能瓶颈。 诊断Java应用程序的问题和异常。 使用Java诊断工具的过程如下: 一、确定问题并选择工具 首先,需要明确需要解决或分析的问题。根据问题的性质和场景选择相应的工具。Java诊断工具种类很多,比如常用的Jav…

    Java 2023年5月11日
    00
  • 利用java实现一个客户信息管理系统

    利用Java实现客户信息管理系统攻略 系统设计思路 客户信息管理系统主要是为了方便企业记录并管理客户信息数据,并用于后续的数据分析和处理等工作。 在系统设计中,我们需要考虑以下几个方面: 数据库设计 客户信息管理系统需要存储大量的客户数据,因此需要设计合理的数据库结构。通常可以使用MySQL或者Oracle等关系型数据库进行实现。在设计数据库时,需要考虑到数…

    Java 2023年5月19日
    00
  • 常见的Java单元测试框架有哪些?

    常见的 Java 单元测试框架有 JUnit、TestNG、Spock 等。 JUnit JUnit 是一个 Java 单元测试框架,它是一个 Open Source 软件,遵循 Apache2.0 许可。JUnit 提供了一些注解和断言,可以使用它们编写测试代码。 示例说明 创建被测试类 public class Calculator { public i…

    Java 2023年5月11日
    00
  • SpringMVC拦截器配置及运行流程解析

    SpringMVC拦截器配置及运行流程解析 前言 在 SpringMVC 中,拦截器是非常重要的一个组件之一,它可以拦截来自浏览器的请求并进行相应的处理,如登录认证、日志记录、性能监控等。本文将详细阐述 SpringMVC 拦截器的配置及运行流程,并提供两条示例说明,帮助读者更好地理解和应用拦截器。 拦截器的配置 在 SpringMVC 中,拦截器的配置是通…

    Java 2023年5月16日
    00
  • Java SpringMVC 异常处理SimpleMappingExceptionResolver类详解

    Java SpringMVC 异常处理SimpleMappingExceptionResolver类详解 简介 SpringMVC 提供了多种异常处理方式,其中 SimpleMappingExceptionResolver 是一种简单而常用的方式。SimpleMappingExceptionResolver 可以将抛出的异常映射到指定的视图,从而将异常信息渲…

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