java计算时间的秒数差,去掉周末和节假日

如题所说,计算两个时间的秒数(工作日),拿到这个需求,首先想到的就是怎么去掉周末和节假日,或者两个时间有一个在周末或节假日,或者两个时间都在,要分别进行处理。

说一下我自己的思路,我是一步步的去判断比较的:

1、首先判断开始日期是否大于结束日期,万一呢,多加个判断准没错

2、比较两个日期是否在同一天,如果在同一天的话,判断开始时间是否是周六或者周日,是的话就直接返回0,不是就两个时间去减

3、获取两个日期之内的所有日期(包含两个日期当天),拿到两个日期当天进行判断,因为当时和业务确认了需求,所以只判断了周末;然后循环中间的日期,如果是周末,天数-1,如果是节假日天数+1

代码如下

public String getDealDuration(String startTime, String endTime){logger.info("开始时间为:{}, 结束时间为:{}", startTime, endTime);//转成日期格式SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date sdate = null;Date edate = null;try {sdate = sdf.parse(startTime);edate = sdf.parse(endTime);} catch (ParseException e) {e.printStackTrace();}// 比较开始日期是否大于结束日期if(sdate.compareTo(edate) == 1){return "0";}// 比较两个日期是否在同一天if(sdate.compareTo(edate) == 0){// 比较两个日期是否都是周六或者周日SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd");Date start = null;try {start = simple.parse(startTime);} catch (Exception e) {e.printStackTrace();}Calendar calendar = Calendar.getInstance();calendar.setTime(start);int startDay = calendar.get(Calendar.DAY_OF_WEEK);if(startDay == 1 || startDay == 7){return "0";}long time = (edate.getTime() - sdate.getTime()) / 1000;return String.valueOf(time);}//获取两个日期之内的所有日期List<String> days = getDays(startTime, endTime);if(days.size() == 0){return "0";}if(days.size() == 1){long time = (edate.getTime() - sdate.getTime()) / 1000;return String.valueOf(time);}//获取开始日期和结束日期,对开始日期和结束日期进行处理String startDate = days.get(0);String endDate = days.get(days.size() - 1);//判断开始时间和结束时间是不是周六日SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd");Date start = null;Date end = null;try {start = simple.parse(startDate);end = simple.parse(endDate);} catch (Exception e) {e.printStackTrace();}Calendar startCalendar = Calendar.getInstance();startCalendar.setTime(start);int startDay = startCalendar.get(Calendar.DAY_OF_WEEK);if(startDay == 1 || startDay == 7){startDate = startDate + " 23:59:59";try {sdate = sdf.parse(startDate);} catch (Exception e) {e.printStackTrace();}}Calendar endCalendar = Calendar.getInstance();endCalendar.setTime(end);int endDay = endCalendar.get(Calendar.DAY_OF_WEEK);if(endDay == 1 || endDay == 7){endDate = endDate + " 00:00:00";try {edate = sdf.parse(endDate);} catch (Exception e) {e.printStackTrace();}}//遍历循环每个日期,看是否是周六或周日或节假日Calendar calendar = Calendar.getInstance();int weekDay = 0;int holiday = 0;for (int i = 1; i < days.size() - 1; i++) {Date date = null;DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");try {date = dateFormat.parse(days.get(i));} catch (ParseException e) {e.printStackTrace();}calendar.setTime(date);//判断是否是周末int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);if (dayOfWeek == 1 || dayOfWeek == 7){weekDay += 1;}//判断是否是节假日Integer integer = workFormDao.selectWorkCalendar(DateTimeUtil.getFormatDateFromString(days.get(i), "yyyy-MM-dd"));if(!"".equals(String.valueOf(integer)) && integer != null){if(integer == 0){weekDay += 1;}if(integer == 1){holiday += 1;}}}long time = (edate.getTime() - sdate.getTime()) / 1000 + holiday * 24 * 3600 - weekDay * 24 * 3600;return String.valueOf(time);
}public static List<String> getDays(String startTime, String endTime) {// 返回的日期集合List<String> days = new ArrayList<>();DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");try {Date start = dateFormat.parse(startTime);Date end = dateFormat.parse(endTime);Calendar tempStart = Calendar.getInstance();tempStart.setTime(start);Calendar tempEnd = Calendar.getInstance();tempEnd.setTime(end);tempEnd.add(Calendar.DATE, +1);// 日期加1(包含结束)while (tempStart.before(tempEnd)) {days.add(dateFormat.format(tempStart.getTime()));tempStart.add(Calendar.DAY_OF_YEAR, 1);}} catch (Exception e) {e.printStackTrace();}return days;
}

自己的处理确实有点复杂,欢迎大家提供新的思路。

java计算时间的秒数差,去掉周末和节假日相关推荐

  1. oracle中时间差转秒,oracle计算时间秒数差

    --计算plsql处理时间差 --qzq declare time1 timestamp; --开始时间 time2 timestamp; --结束时间 sum1 number(9); --时间差(s ...

  2. C计算1970年到现在时间的秒数

    //*********************************************** //函数功能:计算1970年到现在时间的秒数 //入口参数:Y,M,D,h,m,s当前的年,月,日, ...

  3. 【C语言】日期时间转秒数

    日期时间转秒数 将例如"2020年8月14日 12:30:15"的日期时间转换为从1970年1月1日0时0分0秒开始至今的UTC时间秒数,不计闰秒.(中国大陆.中国香港.中国澳门. ...

  4. java计算时间差距_硬计算和软计算之间的差异

    java计算时间差距 什么是计算? (What is Computing?) The process of accomplishing a particular task with the help ...

  5. 【Windows】windows10时间显示秒数

    一般情况下windows10的电脑时间只显示小时和分钟,但是有的用户想要时间显示更加精细,那么windows10时间怎么显示秒呢?大家可以通过修改注册表的方式进行设置:打开注册表编辑器,定位到Adva ...

  6. 【Windows】windows10 时间显示秒数

    windows10 时间显示秒数 1.win+R打开运行对话框,输入 regedit回车,打开注册表编辑器 2.在注册表编辑器中找到 HKEY_CURRENT_USER > SOFTWARE & ...

  7. php获取当前时间的秒数

    php获取当前时间的秒数 解决方法: 其中time() 函数返回从1970-01-01 00:00:00起到现在的时间的秒数. 用法:http://www.yayihouse.com/yay​ishu ...

  8. Java计算时间区间内工作日天数

    Java计算时间区间内工作日天数,并去除放假日与周末重叠数据 实际生活中,国家法定假日可能与周六周日重叠,所以需要去重.对于放假补班的特殊情况,需要另外补充 实际生活中,国家法定假日可能与周六周日重叠 ...

  9. Java 计算一段时间段内除去周六日、节假日的工作日数———超详细(全)

    Java 计算一段时间段内除去周六日.节假日的工作日数'' 1.前端界面简介 2.后台处理代码 3.注: <END> 实现功能提要: 本文章记录的是某段时间的起止时间段内的工作日,既是除去 ...

最新文章

  1. ie7和ie8 select使用jquery clone不兼容处理
  2. 字节跳动一面:i++ 是线程安全的吗?
  3. 深度解析Python的内存管理机制:垃圾回收机制
  4. Java虚拟机:对象创建过程与类加载机制、双亲委派模型
  5. WinExec, ShellExecute,CreateProcess的对比
  6. 【BootStrap】初步教程
  7. Spring MVC中的验证组
  8. 智慧气象机器_智慧电缆隧道火热建设中 传感器+机器人成标配
  9. 【4】搭建Docker私服harbor
  10. mysql poolsize_thread_pool_size的调整
  11. android学习--TabHost选项卡组件
  12. HTML5实践 -- 使用css装饰你的图片画廊
  13. java中的比较运算符_Java基础---Java中的比较运算符(十三)
  14. 关于作者(《蓝调口琴指南》名作拙译)
  15. CGLIB实现AOP,MethodInterceptor接口和Enhancer详解——Spring AOP(四)
  16. iOs LightBlue与cc2540 BLE开发板之间的通信实验 [原创, 多图]
  17. tailf追踪日志文件
  18. itext修改pdf文字
  19. c语言unit id是什么,小程序再升级之什么是UnitionID
  20. dmg文件 linux,Linux通过命令行建立dmg文件的方法

热门文章

  1. win10亮度无法调节
  2. 七夕快到了,中国人自己的情人节,恋爱中的情人们怎么过呢
  3. HTML内镶svg编辑器!后续改进,记录过程!
  4. Tsukuru Tazaki and his Years of Pilgrimage
  5. excel服务器文件只读,excel只读服务器
  6. 关于android有道词典的修改
  7. 隔壁班的 女同学 觉得这本技术书还挺棒的
  8. 人类一败涂地做图教程_人类一败涂地自定义人物怎么制作 捏人实用技巧教学...
  9. 基于yacto构建am5728 SDK
  10. 微信如何实现小程序实时视频直播点播?有哪些难点?