目标:

根据工作时间,往前推算一定小时时间。

分析思路:

假设现在时间是13:48
        工作时间是07:00-13:00
        往前推2个小时是多少
        13-2
        12 11
        也就是13-2

假如是负数,
        其实是flagTime - workStartTime - configTime够不够减,够减直接减,不够继续判断到够
        >=0够减
        <0 那么判断几个workEndTime-workStartTime够,一个够的话,假如是小时,则日期减去1,假如是休息日,则继续减1
        有点像gap+(x-y)*n - value>=0,额
        那循环就完事了,求出n先

/*** 往前推算时间代码示例* @throws Exception*/private void test10() throws Exception {/*分析思路:假设现在时间是13:48工作时间是07:00-13:00往前推2个小时是多少13-212 11也就是13-2假如是负数,其实是flagTime - workStartTime - configTime够不够减,够减直接减,不够继续判断到够>=0够减<0 那么判断几个workEndTime-workStartTime够,一个够的话,假如是小时,则日期减去1,假如是休息日,则继续减1有点像gap+(x-y)*n - value>=0,额那循环就完事了,求出n先*/Date flagTime = new Date(2022 - 1900, 6, 21, 9, 00, 0);System.out.println(flagTime);SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");Calendar flagTimeCa = Calendar.getInstance();flagTimeCa.setTime(flagTime);Date workStartDate = new Date();workStartDate.setHours(9);workStartDate.setMinutes(0);Calendar workStartTimeCalendar = Calendar.getInstance();workStartTimeCalendar.setTime(workStartDate);Date workEndDate = new Date();workEndDate.setHours(12);workEndDate.setMinutes(30);Calendar workEndTimeCalendar = Calendar.getInstance();workEndTimeCalendar.setTime(workEndDate);Calendar workStartTimeCalendar2 = Calendar.getInstance();workStartTimeCalendar2.setTime(timeFormat.parse("09:00:00"));Calendar workEndTimeCalendar2 = Calendar.getInstance();workEndTimeCalendar2.setTime(timeFormat.parse("12:30:00"));//6个小时int hour = 6;Calendar resutlCa = Calendar.getInstance();boolean flag = true;int n = 0;while (flag) {//如果在工作时间期间,直接减if (flagTime.after(workStartDate) && flagTime.before(workEndDate)) {if (flagTimeCa.getTimeInMillis() - workStartTimeCalendar.getTimeInMillis() +(workEndTimeCalendar2.getTimeInMillis() - workStartTimeCalendar2.getTimeInMillis()) * n - hour * 60 * 60 * 1000 >= 0) {flag = false;break;}}else {if ((workEndTimeCalendar2.getTimeInMillis() - workStartTimeCalendar2.getTimeInMillis()) * n - hour * 60 * 60 * 1000 >= 0) {flag = false;break;}}n++;}if (n == 0) {Date resutlTime = new Date(flagTimeCa.getTimeInMillis() - workStartTimeCalendar.getTimeInMillis());resutlCa.setTime(resutlTime);}if (n > 0) {if (flagTime.after(workStartDate) && flagTimeCa.before(workEndDate)) {long offset = hour * 60 * 60 * 1000 - flagTimeCa.getTimeInMillis() - workStartTimeCalendar.getTimeInMillis() +-(workEndTimeCalendar2.getTimeInMillis() - workStartTimeCalendar2.getTimeInMillis()) * n;resutlCa.setTime(new Date());resutlCa.set(flagTime.getYear(), flagTime.getMonth(), flagTime.getDate(), 12, 30, 0);resutlCa.add(Calendar.DATE, -n);resutlCa.add(Calendar.MILLISECOND, (int) -offset);}if (flagTime.after(workEndDate)) {int dayOffset = n - 1;long offset = hour * 60 * 60 * 1000 - (workEndTimeCalendar2.getTimeInMillis() - workStartTimeCalendar2.getTimeInMillis()) * dayOffset;resutlCa.setTime(new Date());resutlCa.set(flagTime.getYear(), flagTime.getMonth(), flagTime.getDate(), 12, 30, 0);resutlCa.add(Calendar.DATE, -dayOffset);resutlCa.add(Calendar.MILLISECOND, (int) -offset);}//假设flagTime在开始时间前,要多减去一天if (flagTime.before(workStartDate)) {int dayOffset = n - 1;long offset = hour * 60 * 60 * 1000 - (workEndTimeCalendar2.getTimeInMillis() - workStartTimeCalendar2.getTimeInMillis()) * dayOffset;resutlCa.setTime(new Date());resutlCa.set(flagTime.getYear(), flagTime.getMonth(), flagTime.getDate(), 12, 30, 0);resutlCa.add(Calendar.DATE, -n);resutlCa.add(Calendar.MILLISECOND, (int) -offset);}}System.out.println(new Date(resutlCa.getTimeInMillis()));}

往前推算时间算法示例-java相关推荐

  1. java 回溯_java 实现迷宫回溯算法示例详解

    用一个7 x 7的矩形表示迷宫,0和1分别表示的是通路和障碍.通过设计编写程序找到蓝色小球达到蓝色旗子的路线 思路: 构建一个迷宫(用二维数组)实现找通路的方法findRoad() 构建二维数组不难, ...

  2. java实现约瑟夫环完整算法_Java简单实现约瑟夫环算法示例

    Java简单实现约瑟夫环算法示例 发布时间:2020-10-01 14:19:56 来源:脚本之家 阅读:104 作者:perfect亮 本文实例讲述了Java简单实现约瑟夫环算法.分享给大家供大家参 ...

  3. java如何实排班表时间算法_java如何实排班表时间算法

    java如何实排班表时间算法 [2021-02-09 22:33:43]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace(" ...

  4. java如何实排班表时间算法_安卓自定义View-日历型排班表-CalendarScheduleView

    [原创,转载请注明出处] [使用效果] 未点击.jpg 点击.jpg 注释很详细,因此直接上代码: CalendarScheduleView.java /** * 日历型排班表 * 注意:只能显示本月 ...

  5. 【Java 8 新特性】Java 8 时间接口示例:MonthDay、Month、OffsetDateTime 和 OffsetTime

    Java 8 时间接口示例:MonthDay.Month.OffsetDateTime 和 OffsetTime java.time.MonthDay java.time.Month java.tim ...

  6. java 1个月前_java获取一个月前的时间

    java获取一个月前的时间 方法一: SimpleDateFormat formatter = new SimpleDateFormat( "yyyyMMdd" ); Date c ...

  7. java怎么给时间赋值_Java 8新时间日期库java.time的使用示例

    Instant--它代表的是时间戳 LocalDate--不包含具体时间的日期,比如 2020-01-14.它可以用来存储生日,周年纪念日,入职日期等. LocalTime--它代表的是不含日期的时间 ...

  8. java 3 9 2 6数字排序_GitHub - JourWon/sort-algorithm: 史上最全经典排序算法总结(Java实现)...

    史上最全经典排序算法总结(Java实现) 查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中.因为其实现代码较短,应用较常见.所以在面试中经常会问到排序算法及其相关的问题.但万变不离其宗, ...

  9. 算法(Java)——动态规划

    算法相关数据结构总结: 序号 数据结构 文章 1 动态规划 动态规划之背包问题--01背包 动态规划之背包问题--完全背包 动态规划之打家劫舍系列问题 动态规划之股票买卖系列问题 动态规划之子序列问题 ...

最新文章

  1. 具有缺失值的多元时间序列的递归神经网络
  2. thunderbird怎样方便的导入gmail联系人
  3. Java8之Consumer、Supplier、Predicate和Function攻略
  4. Activiti源码 之工厂模式
  5. Django单元测试
  6. java抽组件_Java实现的基于模板的网页结构化信息精准抽取组件:HtmlExtractor
  7. Redis主从、哨兵模式的搭建
  8. 阿里云php-7.2.12 安装
  9. D3D游戏关于窗口中如何精确确定鼠标位置的相关讨论
  10. 【退役文】人退心不退,博客有空继续更
  11. python 零代码快速开发平台_企业如何选择开源的零代码开发平台
  12. 解决CPU使用过高问题
  13. 4个步骤让你空手套白狼,零投资净赚百万!颠覆传统的商业思维!
  14. HDU-6194 string string string
  15. 计算机二级关于ppt的题目,全国计算机二级题库Ppt题目考点.doc
  16. 营销老炮儿征战史1:利乐大手笔开市场
  17. DAGM2007数据集扩增(COCO格式以及VOC格式的灰度图数据集都可用)
  18. 基于PHP+小程序(MINA框架)+Mysql数据库的校园跑腿小程序系统设计与实现
  19. 3dmax如何拆分模型_如何在3D Builder中拆分3D模型。 Windows解决方案
  20. 陪伴我走过春夏秋冬的大学校园

热门文章

  1. c语言中x10是什么意思啊,C语言笔记一(概念)
  2. 程序员真的是吃青春饭吗?分享我的6点面试经验,分分钟搞定!
  3. AcWing周赛 72 场 LeetCode单周赛 314 场 总结
  4. OpenCV 中的 warpAffine
  5. 7、Hive数据仓库——Hive JDBC
  6. linux 查看文件 可翻页,Linux如何读取文件,如何翻页
  7. Java编程之实现数字化的连连看
  8. 阿里 postgresql mysql_如何将PostgreSQL与MySQL相结合,实现1+12的组合拳?(下)-阿里云开发者社区...
  9. linux 无法创建文件,无法创建文件系统以及无法创建PV时怎么办?
  10. Fastdfs 卸载