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日

相关文章

  • Java8新特性之深入解析日期和时间_动力节点Java学院整理

    Java8新特性之深入解析日期和时间_动力节点Java学院整理 为什么需要新的日期和时间API Java早期的日期和时间API出现了很多问题,如: API不一致:Java提供了大量日期和时间API,但它们之间的API不一致,这使得编写日期和时间代码非常困难。 可变性:Java早期的日期和时间API中的大多数类都是可变的,这意味着我们可以随时更改日期和时间,这…

    Java 2023年6月1日
    00
  • Java实现简单的分页功能

    下面是“Java实现简单的分页功能”的完整攻略。 第一步:引入相关依赖 在项目的pom.xml文件中引入以下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa&…

    Java 2023年5月26日
    00
  • Spring Security过滤器链体系的实例详解

    Spring Security过滤器链体系的实例详解 什么是Spring Security Spring Security 是一个基于 Spring 框架的安全性框架,也是当前最为流行的 Java 安全框架之一。它提供了全面的安全性解决方案,可以在 Web 请求级别和方法调用级别上进行身份验证、授权和其他防御性措施的相应。它可以最大程度地保证应用程序的安全性…

    Java 2023年6月3日
    00
  • Java使用application.property读取文件里面的值

    当我们开发Java Web 应用时,经常需要从配置文件中读取一些参数,这里我们将详细讲解如何使用 application.properties 文件来读取配置值。 1. 创建配置文件 我们首先需要创建一个 application.properties文件,该文件是Spring Boot标准的配置文件,实际上Spring Boot中有多种方式配置应用程序,如a…

    Java 2023年5月19日
    00
  • 前台js对象在后台转化java对象的问题探讨

    前台js对象在后台转化java对象的问题探讨 当我们使用前后端分离的架构时,前台js对象与后台java对象之间需要进行转化。在这个过程中会遇到一些问题,如何解决这些问题呢?下面就来探讨一下这个问题。 第一步:前台js对象转化为后台json对象 前台js对象可以通过JSON.stringify()方法转化为json对象,具体操作如下: var jsObject…

    Java 2023年5月26日
    00
  • Java 操作Properties配置文件详解

    Java操作Properties配置文件详解 在Java开发中,Properties是一种经常使用的配置文件格式。Properties文件是一种键值对的格式,它通常用来存储应用程序的配置信息,比如数据库的连接信息、系统参数等等。 Properties的基本格式 Properties文件通常是一个以.properties为后缀的文本文件,其中每一行都是一个键值…

    Java 2023年5月20日
    00
  • 零基础入门学习——Spring Boot注解(一)

    下面是针对“零基础入门学习——SpringBoot注解(一)”的完整攻略讲解。 简介 本文主要介绍SpringBoot注解的使用方法,包含基本注解的使用和自定义注解的使用。如果你还没有学习过SpringBoot框架,可以先阅读“零基础入门学习——SpringBoot(一)”和“零基础入门学习——SpringBoot(二)”,前者介绍了SpringBoot的基…

    Java 2023年5月15日
    00
  • AOT的实现原理是什么?

    AOT(Ahead-Of-Time)指的是编译时预先编译的技术。在 JavaScript 应用中,AOT 技术是指将 TypeScript/ES2015+ 代码及其依赖项编译成 JavaScript 执行。本文将详细讲解 AOT 的实现原理。 实现原理 AOT 的实现原理是通过将应用代码的模板、组件、指令等和其它相关的信息预编译成便于加载和执行的格式。在应用…

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