java计算工作时间除去节假日以及双休日

要计算Java中工作时间(即除去节假日和双休日),一般的做法是使用第三方库或者手动编写代码来计算时间间隔并排除非工作日的时间。下面是两种实现方式的介绍。

使用第三方库

Java中有一些第三方库可以方便地计算时间间隔并排除非工作日。其中一种比较常用的是Joda-Time库。在计算时间间隔时,可以使用Period类,该类可以计算两个日期之间的天数、小时数、分钟数等时间间隔。在排除非工作日时,可以使用HolidayCalendar类,该类可以定义节假日和周末,并排除这些非工作日的时间。

下面是一个示例代码:

import org.joda.time.DateTime;
import org.joda.time.Period;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.HolidayCalendar;
import org.joda.time.MutableDateTime;

public class WorkingTimeCalculator {
   private static final DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd");

   public static void main(String[] args) {
      DateTime start = FORMATTER.parseDateTime("2021-09-01");
      DateTime end = FORMATTER.parseDateTime("2021-09-30");
      HolidayCalendar<MutableDateTime> holidayCalendar = new MyHolidayCalendar();
      Period workPeriod = Period.ZERO;
      MutableDateTime curDate = start.toMutableDateTime();
      while (curDate.isBefore(end)) {
         if (holidayCalendar.isHoliday(curDate)) {
            curDate.addDays(1);
            continue;
         }
         if (curDate.getDayOfWeek() >= 1 && curDate.getDayOfWeek() <= 5) {
            workPeriod = workPeriod.plus(Period.hours(8));
         }
         curDate.addDays(1);
      }
      System.out.println("Total working time: " + workPeriod.toString());
   }

   private static class MyHolidayCalendar implements HolidayCalendar<MutableDateTime> {
      public boolean isHoliday(MutableDateTime date) {
         DateTime christmas = FORMATTER.parseDateTime("2021-12-25");
         DateTime newYear = FORMATTER.parseDateTime("2022-01-01");
         return date.getMonthOfYear() == christmas.getMonthOfYear() && date.getDayOfMonth() == christmas.getDayOfMonth() ||
                date.getMonthOfYear() == newYear.getMonthOfYear() && date.getDayOfMonth() == newYear.getDayOfMonth();
      }
      public DateTime nextHoliday(MutableDateTime date) { return null; }
   }
}

这个示例代码计算从2021年9月1日到2021年9月30日工作日总时间,排除双休日和9月25日(国庆节)、10月1日(国庆节)这两天节假日。代码先将时间间隔初始化为Period.ZERO,然后循环计算每一天的工作时间,并在循环中判断是否为非工作日。

手动编写代码

在Java中手动编写代码来计算工作时间也是可行的。需要手动实现计算时间间隔和排除非工作日的逻辑。下面是一个示例代码:

import java.util.Calendar;

public class WorkingTimeCalculator {
   public static void main(String[] args) {
      Calendar start = Calendar.getInstance();
      start.set(2021, 8, 1);
      Calendar end = Calendar.getInstance();
      end.set(2021, 8, 30);
      int workHours = 0;
      while (start.before(end)) {
         int dayOfWeek = start.get(Calendar.DAY_OF_WEEK);
         if (dayOfWeek == Calendar.SUNDAY || dayOfWeek == Calendar.SATURDAY) {
            start.add(Calendar.DAY_OF_MONTH, 1);
            continue;
         }
         workHours += 8;
         start.add(Calendar.DAY_OF_MONTH, 1);
      }
      System.out.println("Total working time: " + workHours + " hours");
   }
}

这个示例代码计算从2021年9月1日到2021年9月30日工作日总时间,排除双休日。代码使用Calendar类来获取日期和星期几,并在循环中判断是否为双休日,如是则跳过计算工作时间,否则将工作时间加8小时。

这两种方式都可以实现计算Java中工作时间(即除去节假日和双休日)的功能,具体如何选择,取决于个人习惯和代码需求。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java计算工作时间除去节假日以及双休日 - Python技术站

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

相关文章

  • 详解java倒计时三种简单实现方式

    详解java倒计时三种简单实现方式 方式一:使用Thread.sleep()实现倒计时 使用Thread.sleep()方法可以实现很简单的倒计时效果,该方法会使线程暂停指定时间再继续执行。具体实现步骤如下: 使用Scanner类获取用户输入的倒计时时间,以秒为单位。 java Scanner scanner = new Scanner(System.in)…

    Java 2023年5月18日
    00
  • 深入浅析TomCat Session管理分析

    深入浅析Tomcat Session管理分析 什么是Session管理 Session管理是指Web服务器为每个用户会话(Session)维持一个状态。在Web应用中,服务器经常需要将信息存储在会话中,例如用户登录信息等。传统的Session实现通常采用Cookie,但是这种方式存在一些弊端,比如容易被恶意攻击者劫持和侵犯隐私等。 Tomcat是一个流行的W…

    Java 2023年5月19日
    00
  • Redis介绍和使用场景详解

    Redis介绍和使用场景详解 什么是Redis Redis是一种高性能的内存数据库,其发展史可以追溯到2009年。Redis支持多种数据结构,包括字符串、哈希表、列表、集合和有序集合,同时还支持事务、持久化和复制等功能。Redis作为一个内存数据库,它的读写速度非常快,被广泛应用在数据缓存、消息队列、计数器等场景中。 Redis的使用场景 缓存 Redis最…

    Java 2023年6月1日
    00
  • JSP 点击链接后下载文件(相当于右键另存)功能

    要实现JSP点击链接后下载文件的功能,需要以下几个步骤: 确定下载文件的路径:首先需要确定要下载的文件所在的路径,这个路径可以是本地服务器上的路径,也可以是远程服务器上的路径。 编写JSP页面:在JSP页面中实现下载文件的功能,需要将下载文件的路径传到后台处理页面,然后在后台处理页面中将文件读取到输出流中并发送给客户端。 以下是一个简单的示例说明: 示例1:…

    Java 2023年6月15日
    00
  • Java 数组转List的四种方式小结

    Java 数组转 List 的四种方式小结 在 Java 开发中,数组和 List 是非常常见的数据类型。有时我们需要将数组转换成 List 以便进行操作。本文将介绍四种将 Java 数组转换成 List 的常用方法。 方法一:使用 Arrays.asList() Arrays 类提供了一个 asList() 方法,可以将数组转换成 List。 SomeTy…

    Java 2023年5月26日
    00
  • Sprint Boot @RequestPart使用方法详解

    Spring Boot的@RequestPart的作用与使用方法 在Spring Boot中,@RequestPart注解用于获取HTTP请求中的文件上传参数。通过使用@RequestPart注解,可以方便地获取HTTP请求中的文件上传参数,并将其注入到方法参数中。在本文中,我们将详细介绍@RequestPart注解的作用和使用方法,并提供两个示例。 @Re…

    Java 2023年5月5日
    00
  • Java Web实现文件上传和下载接口功能详解

    Java Web实现文件上传和下载接口功能详解 一、文件上传接口 1. HTML表单 文件上传的第一步是需要在前端实现一个HTML表单,用户通过这个表单可以上传文件。表单中必须含有一个type为file的input元素,这个元素用来选择文件。 <form action="/upload" method="POST&quot…

    Java 2023年5月19日
    00
  • Mybatis源码解析之事务管理

    Mybatis源码解析之事务管理 什么是事务 事务是指一系列操作,这些操作必须同时成功或者同时失败。比如,银行转账操作就是一个事务,它包括从一个账户扣除金额并把金额加到另一个账户中。这个过程中如果其中一个操作失败,那么这个事务就必须回滚,保证不会出现数据不一致或者数据丢失的情况。 Mybatis中的事务管理 Mybatis提供了基于JDBC的事务管理,其中有…

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