锁定老帖子 主题:[请教]计算工作日和工作时间的算法
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2004-06-05
Quake Wang 写道 需要考虑起始时间和结束时间是否为工作日,你的算法是错误的。算小时也是一样,不光要考虑起始,结束时间是否为工作日,还要考虑是否为工作时间区段内。
这样是不是会有纰漏。 比方说同样是11天间隔,可以是星期一到下个星期四,中间间隔两个工作日, 也可以是星期五到大下个星期一,中间却间隔了四个工作日。 应该将起始日期补齐到星期一再计算,最后加上补齐的天数(周日周末除外)。 |
|
返回顶楼 | |
发表时间:2004-06-05
To pufan,
我已经考虑到这个问题了,所以在上面给出的sql script里面除了调整开始,结束时间到工作日后,还需要减去datediff(week,@fromDate,@thruDate) * 2 |
|
返回顶楼 | |
发表时间:2004-06-06
Quake Wang 写道 去年的帖子也浮上来了,:)
chenggn2 写道 节假日呢
我的用户需求里面没有这个要求,如果要考虑节假日就很麻烦了,比如每年的农历春应该怎么处理?而且我是在SQL Server里面用sql script,如果碰到这种需求要找现成的代码估计就没有那么容易了。Good Luck! 凤舞凰扬 写道 1.首先两个日期差整除7(一周是7天)假设日期差为X,则问题就变成算余下的日期值+X/7*5了。应该很简单了吧。
需要考虑起始时间和结束时间是否为工作日,你的算法是错误的。算小时也是一样,不光要考虑起始,结束时间是否为工作日,还要考虑是否为工作时间区段内。 mikeho 写道 用Calendar获得起始日期是星期几,然后按照风物黄羊的算法就可以了。
看清楚帖子里面说的,我的用户需求是要求在MS Sql Server里面写的,不能用Java的Calendar对象。 我已经在上面贴出解法了。 首先不好意思,没有看到是去年的帖子,否则也不会回了。 我前面贴的是个思想,运用时肯定有些小不同,你在计算星期的时候首先是找离起始日期最近的周一来计算星期(根本不会出现你说的那样的那样问题),肯定不会简单整除7啊!然后在排算剩余的几天(当然还有可能包括双休,但是很容易排除嘛) |
|
返回顶楼 | |
发表时间:2004-06-07
无明 写道 那在内存中创建一张表把日历读进去,把日期转换成星期,需要时查就是了,也用不了多少内存。读多少年的数据就看你的程序了--呵呵,在这里用个策略模式,以后想到别的算法了,再改它一下
呵呵,我比较懒,所以比较喜欢用表格 这个算法比较赞成,也可以把农历也放进去(我在CSDN看到过一个完整的,如果要的话可搜一下). 用存储过程我也不见得好. 还不如用上面的方法再写一个java类,起码移植性会更强. |
|
返回顶楼 | |
发表时间:2004-06-18
看看我的笨方法
/*计算两个日期之间的工作日 */ declare @datefrom datetime; declare @dateto datetime; set @datefrom='2004-06-01'; set @dateto='2009-06-05'; create table #temp (dtcolumn datetime) while (@dateto >= @datefrom ) begin insert into #temp (dtcolumn) values(@datefrom); set @datefrom=dateadd(day,1,@datefrom); end; select count(*) from #temp where DATEPART(weekday,dtcolumn)<> 7 and DATEPART(weekday,dtcolumn)<> 1 drop table #temp |
|
返回顶楼 | |
发表时间:2004-06-18
create table
drop table 开个玩笑而以 直接做一个循环应该就可以了. |
|
返回顶楼 | |
发表时间:2004-08-24
我们的做法:有一个“节假日维护”,用户自己去输入哪几天放假(当然周六周日是默认已经勾选了放假)。回头需要算工作日的时候,一天天往后跳就是了。
|
|
返回顶楼 | |
发表时间:2004-08-26
gigix 写道 我们的做法:有一个“节假日维护”,用户自己去输入哪几天放假(当然周六周日是默认已经勾选了放假)。回头需要算工作日的时候,一天天往后跳就是了。
可以输入自己的日期成为假日是最基本的功能吧.我的还有一个可以标记为公共假日(就是指定每年都相同),有一个性别的区分(是男的放假,还是女的放假,还是XX),有一个职工名单表(指定那些人可放假),有一个单位列表(指定那些单位可以放假). 如果是被标记为共公假期的话,每年的12月底,就会动用触发器,自动成生明年的假期. 当然你还可以选择删除,修改等. |
|
返回顶楼 | |
发表时间:2004-08-26
其实这里的关键是轮班倒换。我们的考勤系统1000个员工,居然出现>50种的轮班方式。有一个部门居然有20多种轮换(安保部门)。
有些人节假日休息,有些人不休息,即便休息,休息的也不一样。情况太多了,在我们这类工业企业里面更加突出。公司或者政府部门简单多了。商场也有点烦。 |
|
返回顶楼 | |