将日期调整到工作时间

经常用到日期的计算,某个事情从某个时间dt1开始工作,经过N个小时的工作(仅限工作时间),预计什么时间能完工?

假设工作时间是上午9:00 - 18:00,一天9小时了。。。好吧,中午1小时我也算了。

现在有dt1 开工时间, N 工时,求,结束时间dt2。

1.如果直接用dt1 + N,时间少还好,稍一大,就要晚上结束或是第N天的晚上。。。显然不合理。

2.要考虑下班的时间,算到第二天或第三天去。

一天工作9小时,天数:d = N/9

dt2 = dt1 + d

可以了吗?貌似不行。 如果开始时间已经接近下班。。。加上这个d, d可能是1.5,一天半,又要到晚上了。 需要继续修正。

3.设dt3 = dt1 +d

此时得到的时间有可能是在18:00-9:00之间的,也就是非工作时间。

18:00-9:00 共有15个小时(9+24-18=15),超过1天的工作时间,所以要分段处理。

一天内的:18:00-3:00(9小时): dt2 = dt3 + 15小时(15/24=0.625)

过一天的:3:00-9:00: dt2 = dt3 + 1天 + 6小时(6/24=0.25)

so.. over.

伪码:

d = n/9

dt3 = dt1 + d

if (hour(dt3) >= 18 or hour(dt3)

elseif (hour(dt3) >= 3 and hour(dt3)

else dt2 = dt3

其实可能还有更好的函数,但我是在EXCEL中的。。。麻烦一些。

时间: 2024-10-09 19:53:56

将日期调整到工作时间的相关文章

Java日期时间实用工具类

1.Date (java.util.Date)    Date();        以当前时间构造一个Date对象    Date(long);        构造函数        boolean after(Date when)         测试此日期是否在指定日期之后 boolean before(Date when)         测试此日期是否在指定日期之前 Object clone()         返回此对象的副本 int compareTo(Date anotherDat

日期和API

Java1.0对日期和时间的支持只能依赖java.util.Date类,年份的起始选择是1900你那,月份的起始是从0开始计算的.它的返回值中包含了JVM的默认市区CET,即中欧时间.在Java1.1中使用java.util.Calendar类替代Date.同时格式化和解析日期的DateFormat也只存在于Date中,并且线程不安全.Date和Calendar都是可变的.Java8在java.time中整合了很多Joda-Time的特性. java.time提供了LocalDate,Local

详解Java中格式化日期的DateFormat与SimpleDateFormat类

DateFormat其本身是一个抽象类,SimpleDateFormat 类是DateFormat类的子类,一般情况下来讲DateFormat类很少会直接使用,而都使用SimpleDateFormat类完成,下面我们具体来看一下两个类的用法: DateFormat1. DateFormat 介绍DateFormat 的作用是 格式化并解析“日期/时间”.实际上,它是Date的格式化工具,它能帮助我们格式化Date,进而将Date转换成我们想要的String字符串供我们使用不过DateFormat

修改office文档修改日期

修改“创建日期”可采用如下方法: 首先把系统日期调整到您所希望的时间,然后到MS-DOS方式下,对该文件输入如下命令:COPY /B filename +,, (一个加号.两个逗号),当询问您是否确认覆盖时,按下[Y]键即可.(当然,在Windows中执行复制-粘贴 ...,也能完成),另外使用AcdSee也能更改文件的“创建日期”. 修改office文档修改日期

java 8中新的日期和时间API

java 8中新的日期和时间API 使用LocalDate和LocalTime LocalDate的实例是一个不可变对象,它只提供了简单的日期,并不含当天的时间信息.另外,它也不附带任何与时区相关的信息 LocalDate实例提供了多种方法来读取常用的值,比如年份,月份,星期几等 LocalDate date = LocalDate.of(2014,3,18); int year = date.getYear(); Month month = date.getMonth(); int day =

Java8新特性之:新的日期和时间API

一. LocalDate.LocalTime.Instant.Duration以及Period 1.LocalDate只提供日期,不含当天时间信息 LocalDate date = LocalDate.of(2018, 5, 03); int year = date.getYear(); Month month = date.getMonth(); int day = date.getDayOfMonth(); DayOfWeek dow = date.getDayOfWeek(); int l

全面解析Java日期时间API

时区 GMT(Greenwich Mean Time):格林尼治时间,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间. UTC(Universal Time Coordinated):统一协调时间,其以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间,标准 UTC 时间格式 yyyy-MM-dd'T'HH:mm:ss.SSSXXX. 格林尼治时间已经不再被作为标准时间使用,UTC 是最主要的世界时间标准. Java提供了获取当前时间的方法 Syst

Java日期时间API系列7-----Jdk8中java.time包中的新的日期时间API类的特点

1.不变性 新的日期/时间API中,所有的类都是不可变的,这对多线程环境有好处. 比如:LocalDateTime 2.关注点分离 新的API将人可读的日期时间和机器时间(unix timestamp)明确分离,它为日期(Date).时间(Time).日期时间(DateTime).时间戳(unix timestamp)以及时区定义了不同的类. 不同时间分解成了各个类,比如:LocalDate, LocalTime, LocalDateTime, Instant,Year,Month,YearMo

Java日期时间API系列8-----Jdk8中java.time包中的新的日期时间API类的LocalDate源码分析

目录 0.前言 1.TemporalAccessor源码 2.Temporal源码 3.TemporalAdjuster源码 4.ChronoLocalDate源码 5.LocalDate源码 6.总结 0.前言 通过前面Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类中主要的类关系简图如下: 可以看出主要的LocalDate, LocalTime, LocalDateTime, Instant都是实现相同的接口,这里以LocalDate为例分析jav