Java如何计算两个时间段内的工作日天数

针对Java如何计算两个时间段内的工作日天数,可以分成以下几个步骤:

1.确定工作日

首先,我们需要明确工作日的定义。工作日通常是指周一到周五,排除周末和法定节假日。

2.计算天数

其次,确认所需计算的两个时间段,并通过Java API获取这两个时间段之间的天数差。

3.排除非工作日

最后,遍历两个时间段中的每一天,将所有非工作日从计算结果中排除,得到最终的工作日天数。

接下来,我们来看一下两个示例:

示例1:
计算2022年2月1日到2022年2月28日的工作日天数。

1.确认工作日,这里默认按照上文的定义,周一到周五为工作日,周六、周日为非工作日。
2.计算天数,这里通过Java 8中的Duration以及ChronoUnit来计算天数差:

LocalDate start = LocalDate.of(2022,2,1);
LocalDate end = LocalDate.of(2022,2,28);
long days = ChronoUnit.DAYS.between(start, end);

得到days为27天。
3.排除非工作日,这里采用循环遍历的方式,对于每一天进行判断是否为工作日。采用Java 8中的LocalDate及DayOfWeek类进行判断:

LocalDate start = LocalDate.of(2022,2,1);
LocalDate end = LocalDate.of(2022,2,28);
long days = ChronoUnit.DAYS.between(start, end);

int workDays = 0;
for (LocalDate date = start; date.isBefore(end); date = date.plusDays(1)) {
    if (date.getDayOfWeek() != DayOfWeek.SATURDAY && date.getDayOfWeek() != DayOfWeek.SUNDAY) {
        workDays++;
    }
}

System.out.println(workDays);

示例2:
计算2022年5月1日到2022年5月7日的工作日天数。

1.确认工作日,同示例1,周一到周五为工作日,周六、周日为非工作日。
2.计算天数,同示例1,使用Java 8中的Duration以及ChronoUnit来计算天数差:

LocalDate start = LocalDate.of(2022,5,1);
LocalDate end = LocalDate.of(2022,5,7);
long days = ChronoUnit.DAYS.between(start, end);

得到days为6天。
3.排除非工作日,同示例1,采用循环遍历的方式,对于每一天进行判断是否为工作日。也可以将判断工作日的代码封装为一个方法,方便调用:

public static boolean isWorkDay(LocalDate date) {
    return date.getDayOfWeek() != DayOfWeek.SATURDAY && date.getDayOfWeek() != DayOfWeek.SUNDAY;
}

LocalDate start = LocalDate.of(2022,5,1);
LocalDate end = LocalDate.of(2022,5,7);
long days = ChronoUnit.DAYS.between(start, end);

long workDays = Stream.iterate(start, date -> date.plusDays(1))
    .limit(days + 1) // days + 1是因为要包括开始日期和结束日期
    .filter(Main::isWorkDay)
    .count();

System.out.println(workDays);

综上,计算两个时间段内的工作日天数,需要先确认工作日的定义,计算时间间隔的天数差,然后排除非工作日即可。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java如何计算两个时间段内的工作日天数 - Python技术站

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

相关文章

  • SpringBoot 注解事务声明式事务的方式

    下面是详细讲解SpringBoot注解事务声明式事务的方式的完整攻略。 什么是事务 在数据库的操作中,当多条SQL语句同时执行时,为了保证数据的一致性和完整性,我们需要让这些SQL语句在一个整体中完成,有且只有所有语句都执行成功时才提交到数据库里,而任一条语句执行失败时则所有语句都不会被提交。这个整体操作就是“事务”。 在Java中,事务可以通过编程式、声明…

    Java 2023年5月15日
    00
  • 详解web存储中的storage

    详解Web存储中的Storage 一、Storage简介 Storage是Web API的一部分,提供了在浏览器本地存储数据的功能。Storage分为两种类型:localStorage和sessionStorage。 localStorage和sessionStorage的区别在于,localStorage中存储的数据没有时间限制,除非用户手动删除;而ses…

    Java 2023年6月15日
    00
  • java — File类和递归

    File类 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。File类将文件,文件夹和路径封装成了对象,提供大量的方法来操作这些对象。 静态常量 // 静态常量 static String pathSeparator // 与系统有关的路径分隔符 // Window操作系统,分隔符是分号; // Linu…

    Java 2023年4月17日
    00
  • JSP结合js实现img中src更新请求的方法

    JSP结合js实现img中src更新请求的方法 在网页的开发中,我们常常需要使用图片,而这些图片的加载是通过img标签的src属性实现的。有时候,我们需要通过页面上的某些操作,来更新图片的src属性,实现图片动态更新的效果。这时候就需要使用JSP结合js来实现。 步骤如下: 1.在JSP页面中使用img标签,并指定src属性,如下: <img id=&…

    Java 2023年6月15日
    00
  • Prototype Template对象 学习

    Prototype Template对象是AWS Amplify中用于构建和管理部署的云资源的重要对象之一。以下是学习Prototype Template对象的攻略: 1. 理解Prototype Template Prototype Template是AWS Amplify Console中的一个云资源模板(CloudFormation Template)…

    Java 2023年6月15日
    00
  • spring动态bean注册示例分享

    下面是详细讲解“spring动态bean注册示例分享”的完整攻略。 什么是动态bean注册 在Spring中,Bean是所有服务的基本单元。Spring容器会将所有的Bean实例化,管理和组装起来,使它们能够可以相互协作。Bean注册是向Spring容器声明Bean定义的过程,通常是在XML文件或者Java代码中进行的。 动态bean注册是指在运行时添加、修…

    Java 2023年6月15日
    00
  • Eclipse+Java+Swing实现学生成绩管理系统的实例代码

    一、准备工作1.安装JDK和Eclipse2.新建Java Project,导入swing.jar。 二、创建GUI界面创建JFrame并添加组件。包括JLabel、JButton、JTextField、JTable、JScrollPane等。实现添加、删除、修改、查询功能。 示例说明:1. 添加功能需要获取用户输入的学生信息,通过JTextField组件获…

    Java 2023年5月19日
    00
  • Hibernate传入Java对象创建动态表并录入数据

    使用Hibernate可以通过Java对象自动创建表并进行数据录入,具体步骤如下: 添加相关依赖 在项目中添加Hibernate相关依赖,包括Hibernate Core和数据库驱动程序。 创建Java对象 创建一个Java对象,并使用Hibernate注解标识对象和属性,以指定对象如何与数据库交互。例如,创建一个User对象如下: @Entity @Tab…

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