整理了一下,感觉第三方的接口不是很稳定,欢迎提供新的接口地址

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;/*** @author: DevanYan* @create: 2019-06-10 10:52*///工作时长计算工具
public class WorkDayUtil {private static final String API_URL = "http://api.goseek.cn/Tools/holiday?date=";private static final int  WORK_STARK = 9;private static final int  WORK_STOP = 18;/**** @param beginDateTime 开始时间* @param endDateTime 结束时间* @return 时长(单位:天,最小计数单位:0.5)*/public static double workDays(LocalDateTime beginDateTime,LocalDateTime endDateTime){double workDays = 0;LocalDate beginDate = LocalDate.of(beginDateTime.getYear(),beginDateTime.getMonth(),beginDateTime.getDayOfMonth());LocalDate endDate = LocalDate.of(endDateTime.getYear(),endDateTime.getMonth(),endDateTime.getDayOfMonth());Long days =Math.abs(beginDate.toEpochDay()-endDate.toEpochDay());int beginHour = Integer.valueOf(beginDateTime.format(DateTimeFormatter.ofPattern("HH")));int endHour = Integer.valueOf(endDateTime.format(DateTimeFormatter.ofPattern("HH")));if( beginDate.toString().equals(endDate.toString()) ){//同一天if(WorkDayUtil.isWorkDay(beginDate)){if( ( beginHour>= WORK_STARK && endHour >= WORK_STARK && beginHour <= 12 && endHour <= 12) || ( beginHour > 12 && endHour > 12 && beginHour <= WORK_STOP && endHour <= WORK_STOP) ){workDays = 0.5;}else{workDays = 1;}}else{workDays = 0;}}else{//跨天LocalDate dealDate = beginDate;for(int i = 0;i<days-1;i++){dealDate = dealDate.minusDays(-1);if(WorkDayUtil.isWorkDay(dealDate)){workDays++;}}//第一天if(WorkDayUtil.isWorkDay(beginDate)){if(beginHour>12 ){if(beginHour <= WORK_STOP){workDays = workDays + 0.5;}}else{workDays ++;}}//末天if(WorkDayUtil.isWorkDay(endDate)){if(endHour <= 12){workDays = workDays + 0.5;}else{workDays ++;}}}return workDays;}public static boolean isWorkDay(LocalDate date){String dayStr = date.format(DateTimeFormatter.ofPattern("yyyyMMdd"));int flag = WorkDayUtil.apiGet(dayStr);if(flag == 0 || flag == 2){return true;}return false;}/*** @param dateStr* @return 正常工作日对应结果为 0, 法定节假日对应结果为 1, 节假日调休补班对应的结果为 2,休息日对应结果为 3*/public static int apiGet( String dateStr) {String httpUrl= API_URL + dateStr;BufferedReader reader = null;String result = null;StringBuffer sbf = new StringBuffer();int d = 0;try {URL url = new URL(httpUrl);HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("GET");connection.connect();InputStream is = connection.getInputStream();reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));String strRead = null;while ((strRead = reader.readLine()) != null) {sbf.append(strRead);}reader.close();result = sbf.toString();result = result.trim();System.out.println(result);if(result.indexOf("10000")!=-1){result = result.substring(result.indexOf(":")+1);result = result.substring(result.indexOf(":")+1);result = result.substring(0,result.length()-1);d = Integer.valueOf(result);}} catch (Exception e) {e.printStackTrace();}return d;}public static void main(String[] args) {LocalDateTime begin = LocalDateTime.parse("2019-06-01 09:00:00",DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));LocalDateTime end = LocalDateTime.parse("2019-06-14 11:00:00",DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));System.out.println("工作日:"+WorkDayUtil.workDays(begin,end) +"天");}}

转载于:https://www.cnblogs.com/devan/p/10997358.html

根据开始时间结束时间,计算工作日的天数相关推荐

  1. java 根据时间范围自动算间隔_Java根据开始时间结束时间计算时间间隔 x年x月x日...

    最近项目中有这样的需求:根据租赁开始时间租赁结束时间计算租期x年x月x日, 相同的需求还有根据出生日期计算年龄等等...... 例如:开始日期 2020年7月24日  结束日期 2021年9月3日   ...

  2. JAVA 给定开始时间和结束时间计算天数

    1.给定开始时间和结束时间计算天数 package com.ceshi;import java.text.ParseException; import java.text.SimpleDateForm ...

  3. Calendar获取当前季度、月、周的开始时间结束时间

    java在很多场合下会根据当前时间计算本季度的开始时间结束时间.当前月份的开始时间结束时间.当前周的开始时间以及结束时间.我这里整理下一个时间加工类,作为工具类记录下. 一.获取计算相关时间的方法如下 ...

  4. 开始时间结束时间参数不能为空,时间间隔不能超过90天

    Controller层 public AjaxResult export(@RequestBody IncomingAccountQuery incomingAccountQuery){//判断时间是 ...

  5. 帆软报表如何实现开始时间-结束时间-时间间隔(时,日、周、月、年)分段显示数据

    帆软报表如何实现开始时间-结束时间-时间间隔(时,日.周.月.年)分段显示数据 1.效果展示 时间间隔:全部.时.日.周.月.年 按小时 按日 按周 按月 按年 如果这是你想要的,可以继续查看如何实现 ...

  6. js通过开始时间和结束时间计算出中间的所有日期,并且转换为层级结构数组对象,用于甘特图头部日期数据

    写在前面: 先看下最终数据结构展示 time('2020-10-01', '2021-01-06') 需要根据一个开始日期和一个结束日期最后返回以下数组对象 [最外层数组里的每个对象代表了某一年的所有 ...

  7. java根据开始时间和结束时间计算中间间隔日期

    import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; impo ...

  8. oracle时间开始结束时间,Oracle日期周详解以及周开始结束时间计算

    1 Oracle中周相关知识描述 1.1 日期格式化函数 TO_CHAR(X [,FORMAT]):将X按FORMAT格式转换成字符串.X是一个日期,FOR 1 Oracle中周相关知识描述 1.1 ...

  9. Oracle日期周详解以及周开始结束时间计算

    1 ORACLE中周相关知识描述 1.1           日期格式化函数 TO_CHAR(X [,FORMAT]):将X按FORMAT格式转换成字符串.X是一个日期,FORMAT是一个规定了X采用 ...

最新文章

  1. python操作mongodb数据库
  2. 2021清华大学年度人物候选 | 曹丰泽:我要证明,理想主义的路是走得通的
  3. 008_Queue消息模式发送映射消息
  4. JS报错修改日记(1):Uncaught ReferenceError: showQRcode is not defined
  5. 团队作业——随堂小测
  6. 如何安装 Angular CLI 并且检查 CLI 的版本
  7. koa2 mysql_koa2+vue+mysql 全栈开发记录
  8. java修改异常状态码_RxJava2 + Retrofit2 完全指南 之 统一状态码/Exception处理
  9. 【Oracle】Rman简介
  10. 人脸识别之数据库存取
  11. 对涉密计算机检查内容,保密工作检查内容主要有哪些
  12. 采用高通CRS8635的一款蓝牙耳机低功耗评测数据,供交流讨论!
  13. 使用lua脚本开发wow插件(魔兽世界插件开发·二)
  14. 软件测试课程设计——智云云盘
  15. 百度云 不限速 | 2019 最好用下载工具
  16. 【MAUI】条形码,二维码扫描功能
  17. Unity 之 Ping类简析尝试使用
  18. 计算机类ei期刊,【2017年整理】电子类通信类和计算机类EI期刊(大部分免费).docx...
  19. 学生信息管理系统中系统登录问题
  20. V-Play 使用粗体验

热门文章

  1. 童小点思维启蒙机器人试玩:点控编程是亮点 团战更酣
  2. java线程同步机制有哪些_多线程同步机制包括哪些
  3. 用计算机电源 家用电源,电源不该盲目选--聊聊组装机电源
  4. 您好,您睡的还好吗?一起得到白天不困的秘诀吧!
  5. 中职计算机基础课堂传统教学,构建中职计算机基础生态课堂的途径探索
  6. java后台给图片添加水印
  7. 决斗场 - 实验吧 隐写术 男神一般都很低调很低调的!!
  8. web 树莓派zero_树莓派Zero上秒装 OpenCV
  9. OpenCv 入门 --手掌轮廓绘制
  10. 计算机常用英语术语、词汇表(下)