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

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. Android 在运行时请求权限
  2. HTML做frame跳转设置响应头,X-Frame-Options header响应头如何配置
  3. 用命令行为MySQL设置/修改管理员密码
  4. 手动升级oracle,ORACLE 10.2.0.1手动升级到10.2.0.4
  5. 【差分】bzoj 1676 [Usaco2005 Feb]Feed Accounting 饲料计算
  6. LeetCode-50-Pow(x, n)
  7. 漫话:如何给女朋友解释鸿蒙OS是怎样实现跨平台的?
  8. nhinx php 调优,高流量站点NGINX与PHP-fpm配置优化
  9. Docker学习总结(29)——Docker核心技术与实现原理
  10. 你有结账时发现太贵的尴尬吗?
  11. 关键字值集合和IDictionary
  12. C++异常处理全攻略
  13. 第三方支付api接口是什么?
  14. 拉姆达Lambda表达式对list分页,获取list总页数
  15. 业务系统安全工程在阿里的实践|阿里巴巴DevOps实践指南
  16. MIT 6.824 lab3 KVRaft
  17. Python实现多层感知器MLP(基于双月数据集)
  18. 安装win7x64、x86总提示文件出错或安装大型软件出错或0x0000001a、0x0000003b蓝屏
  19. Local Storage、Session Storage、Cookies
  20. pr2020lut导入_pr lut预设怎么安装-PR下导入lut预设的方法 - 河东软件园

热门文章

  1. 如何做好体育翻译,翻译体育赛事需要注意什么事项?
  2. 扫码登录(uniappvue)
  3. Mac编译Aria2突破线程限制兼顾开机启动
  4. 躲藏汉子又是什么梗呢?
  5. NFT 项目的十大评估维度
  6. 基于立体视觉SLAM系统的在线目标检测与定位【论文解析】
  7. C++程序员学习资料汇总
  8. LKT5103A Hid接口LINUX系统下JNI开发流程
  9. java LocalDate 时间比较
  10. python yield 惰性计算,用于scrapy中(美食杰爬虫为例)