这里主要是通过java util包中的Calendar,来判断是否是工作日、计算工期(去除周末)

/*** @ Author:yl1794* @ Date:2019/10/14 16:03* @ Description:*/
public class DateCountUtil {public static final long milliOfDay = 86400 * 1000;/*** 递归:计算开始时间* 防止因期望开始时间在非工作日,而经过逆推导致最终开始时间在参考时间之前的问题** 该场景主要是用于有任务与前置任务的关系。假设A是B的前置任务,则B的开始时间必须在A的截止时间之后。* 若A的截止时间为星期六(referenceTime),那么B的期望开始时间为星期日,由于不是工作日则会往前推,一直推到星期五。* 该时间不满足前提,B的正确开始时间应该是下周一。** @param startTime 期望开始时间* @param referenceTime 参考时间* @return 正确开始时间*/public static long calculationStartTime(long startTime, long referenceTime){long startTimeNew = DateCountUtil.countTime(startTime, true);// 期望开始时间必须在参考时间之后if(startTimeNew > referenceTime){return startTimeNew;}return calculationStartTime(startTime + DateCountUtil.milliOfDay, referenceTime);}/*** 根据开始时间和工期计算截止时间(扣除周末)** @param startTime 开始时间* @param period    工期* @return 截止时间*/public static long calculationEndTime(long startTime, int period) {JDateTime endTime = new JDateTime(startTime).addDay(1).subMillisecond(1);// 遍历工期,判断每天是否是周末for (int i = period - 1; i > 0; i--) {endTime = endTime.addDay(1);int dayOfWeek = endTime.getDayOfWeek();// 如果是周末,则直接跳到周一if (dayOfWeek > 5) {endTime = endTime.addDay(7 - dayOfWeek + 1);}}return endTime.getTimeInMillis();}/*** 计算工期(扣除周末)** @param startTime 开始时间* @param endTime   截止时间* @return 工期*/public static int countPeriod(long startTime, long endTime) {int numberOfDays = 0;Calendar cal1 = Calendar.getInstance();Calendar cal2 = Calendar.getInstance();cal1.setTimeInMillis(startTime);cal2.setTimeInMillis(setEndOfDay(endTime));while (cal1.before(cal2)) {if ((Calendar.SATURDAY != cal1.get(Calendar.DAY_OF_WEEK)) && (Calendar.SUNDAY != cal1.get(Calendar.DAY_OF_WEEK))) {numberOfDays++;}cal1.add(Calendar.DATE, 1);}return numberOfDays;}/*** 计算时间。若是开始时间,则往前计算直至工作日;反之,往后计算。** @param nowTime     时间* @param isStartTime 是否是开始时间* @return 时间*/private static long countTime(long nowTime, boolean isStartTime) {while (!isWeekday(nowTime)) {nowTime = isStartTime ? nowTime - milliOfDay : nowTime + milliOfDay;}return nowTime;}/*** 校验某天是否是工作日** @param date 日期* @return true / false*/private static Boolean isWeekday(long date) {if (isEmpty(date)) {return false;}Calendar cal = Calendar.getInstance();cal.setTimeInMillis(date);return cal.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY && cal.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY;}/*** 将开始时间设置为该天的最开始** @param startTime 日期* @return 开始时间*/public static long setStartOfDay(long startTime) {Calendar cal = Calendar.getInstance();cal.setTimeInMillis(startTime);cal.set(Calendar.HOUR_OF_DAY, 0);cal.set(Calendar.MINUTE, 0);cal.set(Calendar.SECOND, 0);cal.set(Calendar.MILLISECOND, 0);   // 注意毫秒的影响return cal.getTimeInMillis();}/*** 将截止时间设置为该天的最晚** @param endTime 日期* @return 截止时间*/public static long setEndOfDay(long endTime) {return setStartOfDay(endTime) + milliOfDay - 1;}}

【Java】判断是否是工作日、计算工期(去除周末)相关推荐

  1. JAVA判断当前时间是否为节假日、周末、工作日,简单有效!

    JAVA判断当前时间是否为节假日.周末.工作日 需求 有这么个需求,需要判断传的这个日期是否为节假日,周末,工作日,然后做剩下的操作. 话不多说,上代码 1.首先需要拿到节假日api 节假日API地址 ...

  2. [需求总结] 关于 Java 判断是否为工作日、法定节假日

    应用场景 假设我有一个任务,任务一共需要 10 个小时就可以完成.任务开始时间是 2018-3-28,结束时间是 2018-4-8. 我们通过日历可以知道,3-31 和 4-1 是周末,然后 4月份的 ...

  3. java判断磁盘使用率_Java计算磁盘使用率

    华为云文档上的材料值得学习. 翻阅资料,得出: https://www.kernel.org/doc/Documentation/ABI/testing/procfs-diskstats 13 - t ...

  4. php去掉工作日,2014年工作日计算(去除法定假日和周六日,但包括调休日)

    PHP,每年运行一次,每次需要配置指定,当前年,法定假日,调休日 无 ?php$year = '2014';function addYear($date){ return $GLOBALS['year ...

  5. Java判断工作日计算,计算随意2个日期内的工作日

    当前位置:我的异常网» Java Web开发 » 计算随意2个日期内的工作日 计算随意2个日期内的工作日 www.myexceptions.net  网友分享于:2013-08-17  浏览:51次 ...

  6. java计算工作日_Java工作日计算工具类

    工作日计算工具类 主要功能:传入两个日期,返回这两个日期之间有多少个工作日. 思路: 预先设置好一定年份范围内的节假日.补休到map里.(这里暂时只设置了2017 - 2018年的) 将这个年份范围内 ...

  7. java 剔除工作日计算超时时间

    剔除工作日计算超时时间 import com.alibaba.fastjson.JSONObject;import java.math.BigDecimal; import java.text.Par ...

  8. Java通过基姆拉尔森公式判断当前日期是不是工作日

    基姆拉尔森公式 算法如下: 基姆拉尔森计算公式 W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7 在公式中d表示日期中的日数,m表示月份数,y表示年数. 注意:在公 ...

  9. Java 判断当前日期是否 是这个月的最后七天且是否为工作日(星期一到星期五)

    Java 判断当前日期是否 是这个月的最后七天且是否为工作日(星期一到星期五) 话不多说,直接贴代码: import java.text.SimpleDateFormat; import java.u ...

最新文章

  1. 计算点、线、面等元素之间的交点、交线、封闭区域面积和闭合集(续1)
  2. 沾包 nagle算法等
  3. c:forEach循环的List为String时的写法
  4. 在命令行下对ntfs分区文件夹权限的设置
  5. arcgis中字段计算器利用python比较大小
  6. sccm2012 客户端推送安装故障解决一例
  7. C#通过Socket在网络间发送和接收图片的演示源码
  8. python是什么专业学的-什么水平的人才可以学python呢?
  9. 嵌入式软件架构设计之分层设计
  10. 计算机硬件对于工作的重要性,计算机硬件日常维护的重要性
  11. ABAP 中的搜索帮助
  12. USACO CONTEST FEB07 白银莲花池 silvlily 分析
  13. 情绪满盈,心猿似马,人生80%的时间都在自我内耗
  14. 数据库管理工具哪个好?强力推荐Navicat Premium 16 mac中文版
  15. layui表格点击按钮下方新增加空白行
  16. command_execution
  17. 网桥VLAN GROUP组
  18. 中国铁通集团有限公司
  19. crash: mod命令
  20. 秦岭土蜂蜜价格 秦岭土蜂蜜多少钱一斤

热门文章

  1. typedef 相关
  2. 移动手机卡支持NFC支付 小米2A刷地铁体验
  3. Mysql数据库详细教程
  4. Github 开源:使用升讯威 Mapper( Sheng.Mapper)与 AutoMapper 互补,大幅提高开发效率!...
  5. 《精通正则表达式》(第三版)资源
  6. 【图分析】Centrality
  7. matlab 机床,基于MATLAB的数控机床控制系统的设计及仿真
  8. C语言实现大写字母A转换为小写a
  9. 鸿蒙功能系统演示,鸿蒙系统怎么样-有哪些功能
  10. w550官方例程_过年打扫卫生,翻出了十年前的索爱W550,你用过吗?