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

yizhihongxing

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

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日

相关文章

  • JavaMail实现发送超文本(html)格式邮件的方法

    JavaMail是一个用于处理电子邮件的Java API,可发送和接收邮件。要发送HTML格式的邮件,可以按照以下步骤进行: 步骤1: 导入包 import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.P…

    Java 2023年6月15日
    00
  • Java实现拓扑排序的示例代码

    下面是Java实现拓扑排序的完整攻略: 1. 理解拓扑排序的概念 拓扑排序是一种常用于有向无环图(DAG)的算法,用于确定图中所有节点的相对顺序关系。具体来说,拓扑排序可以将一个DAG的所有节点线性排序,使得对于任何一条有向边(u, v),起点u在拓扑排序中都出现在终点v的前面。 2. 实现拓扑排序的算法 一个直接的想法是通过深度优先搜索(DFS)来实现拓扑…

    Java 2023年5月19日
    00
  • 浅谈Java springboot日志管理

    浅谈Java Spring Boot日志管理 作为 Java 程序员,我们使用日志来记录程序运行过程中的状态信息和错误信息。Spring Boot 提供了使用很方便的日志处理方式。在本文中,我们将介绍如何在 Spring Boot 项目中管理日志。 添加日志依赖 Spring Boot 自带日志框架,常用的是 logback 和 log4j2。如果你想使用其…

    Java 2023年5月19日
    00
  • Spring mvc 分步式session的实例详解

    Spring MVC 分步式Session的实例详解 在Spring MVC中,Session是一种用于在服务器端存储用户数据的机制。本文将详细介绍Spring MVC中分步式Session的实现方法,并提供两个示例来说明如何实现这一过程。 分步式Session的实现方法 在Spring MVC中,分步式Session是一种将Session数据分散存储在多个…

    Java 2023年5月17日
    00
  • 探讨Java中最常见的十道面试题(超经典)

    让我来为你详细讲解“探讨Java中最常见的十道面试题(超经典)”的完整攻略。 前言 在面试Java相关职位时,经常会被问到一些非常经典的问题。本文将列举出Java中最常见的十道面试题,并为每个问题提供完整的解答,希望能够帮助你在面试时取得更好的成绩。 面试题1:Java中的“值传递”和“引用传递”有何区别? 在Java中,所有的参数传递都是“值传递”,也就是…

    Java 2023年5月24日
    00
  • Tomca启动闪退问题解决(八大类)

    针对 “Tomcat启动闪退问题” 的解决攻略,我可以提供以下的具体步骤来解决这个问题,该过程中可能包含多个方面的解决方法: 1. 确认Java环境是否正常 首先需要检查Java环境是否正常,在命令行中输入Java -version来查看Java版本是否正确显示。如果没有显示,则需要重新安装并配置Java环境。 2. 检查Tomcat配置 其次需要检查Tom…

    Java 2023年5月19日
    00
  • bootstrap自定义样式之bootstrap实现侧边导航栏功能

    下面是关于“bootstrap自定义样式之bootstrap实现侧边导航栏功能”的完整攻略: 什么是Bootstrap? Bootstrap是一种流行的CSS框架,可帮助开发人员快速创建响应式网站。它提供了大量的CSS和JavaScript组件,可以轻松添加到你的网站上。它不仅可以帮助节省开发时间,还可以提高网站的可访问性和易用性。 Bootstrap如何实…

    Java 2023年5月30日
    00
  • Java object wait notify notifyAll代码解析

    Java中的wait、notify和notifyAll方法是线程之间通信的关键。wait方法用于使调用线程等待,直到另一个线程调用该对象的notify或notifyAll方法。notify方法唤醒其他线程来竞争当前线程,而notifyAll方法唤醒所有等待该对象锁的线程,以便他们可以继续竞争。 下面是一些使用wait、notify和notifyAll的示例:…

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