1.首先判断当前日期为本周的周几;
2.计算当前的日期[只是日期,不带时间的];
如果是周日直接跳出;如果是周六,当前日期+8:00:00,当前日期+12:00:00 处理后,遇当前日期做比较即可;其他日期,处理方式和周六的一样,你所谓的不准确,我感觉应该就是在时,分,秒上的问题吧!
还是整体设计下吧
每天的上下班时间单独放到配置文档中,周六周日等假日最好单独设计一张table将一年的行事历都放进去。在写程序去计算正常的上班时数。
以天为单位
天分为几种 休息日 工作日
第一种一天有几个小时
第二种一天有几个小时 。。
在天内计算时间
第一种开始时间,结束时间
第二种开始时间,结束时间。。。
建立一个worktime类
一个枚举 daytype :freeday workday
里面有一个获取天类型的方法 getdaytype
一个getworktime方法 参数(开始时间,结束时间,daytype)
类就建立完成了
然后建立一个主函数
main
主函数工作流程为
按天遍历
判断每天的类型(getdaytype)
获取每天的开始时间和结束时间
然后计算每天花的时间(getworktime)
遍历完后把时间累加起来就可以了
而且也方便以后扩展
确实比较麻烦,因为中间还有请假,加班,早退,迟到等问题。有效工作时间确实比较麻烦。
另外时间处理也要注意格式问题,否则每个时间转换的时候可能丢掉后面的Time的值
Code
1、首先确定你们公司的请假策略是如何计算,是以小时计算,还是以半天为一个单位
2、写一个策略接口,以便以后扩展,写一个你们公司现在的请假策略,代码应该不是很复杂,大概的方法是,我放进一个时间段(当天),计算出一个请假时间,然后逐天计算一下。
楼上的代码不是不可以,不过有很多弊病,不建议使用,不过可以参考一下
建议你做一个 工作日历 表 , 在表里面可以人工维护,每天的有效工作时间。
这样很灵活,还能应对一些农历的或者临时决定的假期。
我现在也遇见这个问题了,我做的请假的时间判断,设计到法定假日和双休日,我计算出当前请了几个小时的假,希望大家能给我点意见,我现在思路好乱