往前推算时间算法示例-java
目标:
根据工作时间,往前推算一定小时时间。
分析思路:
假设现在时间是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相关推荐
- java 回溯_java 实现迷宫回溯算法示例详解
用一个7 x 7的矩形表示迷宫,0和1分别表示的是通路和障碍.通过设计编写程序找到蓝色小球达到蓝色旗子的路线 思路: 构建一个迷宫(用二维数组)实现找通路的方法findRoad() 构建二维数组不难, ...
- java实现约瑟夫环完整算法_Java简单实现约瑟夫环算法示例
Java简单实现约瑟夫环算法示例 发布时间:2020-10-01 14:19:56 来源:脚本之家 阅读:104 作者:perfect亮 本文实例讲述了Java简单实现约瑟夫环算法.分享给大家供大家参 ...
- java如何实排班表时间算法_java如何实排班表时间算法
java如何实排班表时间算法 [2021-02-09 22:33:43] 简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace(" ...
- java如何实排班表时间算法_安卓自定义View-日历型排班表-CalendarScheduleView
[原创,转载请注明出处] [使用效果] 未点击.jpg 点击.jpg 注释很详细,因此直接上代码: CalendarScheduleView.java /** * 日历型排班表 * 注意:只能显示本月 ...
- 【Java 8 新特性】Java 8 时间接口示例:MonthDay、Month、OffsetDateTime 和 OffsetTime
Java 8 时间接口示例:MonthDay.Month.OffsetDateTime 和 OffsetTime java.time.MonthDay java.time.Month java.tim ...
- java 1个月前_java获取一个月前的时间
java获取一个月前的时间 方法一: SimpleDateFormat formatter = new SimpleDateFormat( "yyyyMMdd" ); Date c ...
- java怎么给时间赋值_Java 8新时间日期库java.time的使用示例
Instant--它代表的是时间戳 LocalDate--不包含具体时间的日期,比如 2020-01-14.它可以用来存储生日,周年纪念日,入职日期等. LocalTime--它代表的是不含日期的时间 ...
- java 3 9 2 6数字排序_GitHub - JourWon/sort-algorithm: 史上最全经典排序算法总结(Java实现)...
史上最全经典排序算法总结(Java实现) 查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中.因为其实现代码较短,应用较常见.所以在面试中经常会问到排序算法及其相关的问题.但万变不离其宗, ...
- 算法(Java)——动态规划
算法相关数据结构总结: 序号 数据结构 文章 1 动态规划 动态规划之背包问题--01背包 动态规划之背包问题--完全背包 动态规划之打家劫舍系列问题 动态规划之股票买卖系列问题 动态规划之子序列问题 ...
最新文章
- 具有缺失值的多元时间序列的递归神经网络
- thunderbird怎样方便的导入gmail联系人
- Java8之Consumer、Supplier、Predicate和Function攻略
- Activiti源码 之工厂模式
- Django单元测试
- java抽组件_Java实现的基于模板的网页结构化信息精准抽取组件:HtmlExtractor
- Redis主从、哨兵模式的搭建
- 阿里云php-7.2.12 安装
- D3D游戏关于窗口中如何精确确定鼠标位置的相关讨论
- 【退役文】人退心不退,博客有空继续更
- python 零代码快速开发平台_企业如何选择开源的零代码开发平台
- 解决CPU使用过高问题
- 4个步骤让你空手套白狼,零投资净赚百万!颠覆传统的商业思维!
- HDU-6194 string string string
- 计算机二级关于ppt的题目,全国计算机二级题库Ppt题目考点.doc
- 营销老炮儿征战史1:利乐大手笔开市场
- DAGM2007数据集扩增(COCO格式以及VOC格式的灰度图数据集都可用)
- 基于PHP+小程序(MINA框架)+Mysql数据库的校园跑腿小程序系统设计与实现
- 3dmax如何拆分模型_如何在3D Builder中拆分3D模型。 Windows解决方案
- 陪伴我走过春夏秋冬的大学校园
热门文章
- c语言中x10是什么意思啊,C语言笔记一(概念)
- 程序员真的是吃青春饭吗?分享我的6点面试经验,分分钟搞定!
- AcWing周赛 72 场 LeetCode单周赛 314 场 总结
- OpenCV 中的 warpAffine
- 7、Hive数据仓库——Hive JDBC
- linux 查看文件 可翻页,Linux如何读取文件,如何翻页
- Java编程之实现数字化的连连看
- 阿里 postgresql mysql_如何将PostgreSQL与MySQL相结合,实现1+12的组合拳?(下)-阿里云开发者社区...
- linux 无法创建文件,无法创建文件系统以及无法创建PV时怎么办?
- Fastdfs 卸载