论坛首页 Java企业应用论坛

[请教]计算工作日和工作时间的算法

浏览 22033 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2004-06-05  
Quake Wang 写道
需要考虑起始时间和结束时间是否为工作日,你的算法是错误的。算小时也是一样,不光要考虑起始,结束时间是否为工作日,还要考虑是否为工作时间区段内。

这样是不是会有纰漏。
比方说同样是11天间隔,可以是星期一到下个星期四,中间间隔两个工作日,
也可以是星期五到大下个星期一,中间却间隔了四个工作日。
应该将起始日期补齐到星期一再计算,最后加上补齐的天数(周日周末除外)。
0 请登录后投票
   发表时间:2004-06-05  
To pufan,
  我已经考虑到这个问题了,所以在上面给出的sql script里面除了调整开始,结束时间到工作日后,还需要减去datediff(week,@fromDate,@thruDate) * 2
0 请登录后投票
   发表时间: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啊!然后在排算剩余的几天(当然还有可能包括双休,但是很容易排除嘛)
0 请登录后投票
   发表时间:2004-06-07  
无明 写道
那在内存中创建一张表把日历读进去,把日期转换成星期,需要时查就是了,也用不了多少内存。读多少年的数据就看你的程序了--呵呵,在这里用个策略模式,以后想到别的算法了,再改它一下

呵呵,我比较懒,所以比较喜欢用表格


这个算法比较赞成,也可以把农历也放进去(我在CSDN看到过一个完整的,如果要的话可搜一下).

用存储过程我也不见得好.
还不如用上面的方法再写一个java类,起码移植性会更强.
0 请登录后投票
   发表时间: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
0 请登录后投票
   发表时间:2004-06-18  
create table
drop table   
开个玩笑而以
直接做一个循环应该就可以了.
0 请登录后投票
   发表时间:2004-08-24  
我们的做法:有一个“节假日维护”,用户自己去输入哪几天放假(当然周六周日是默认已经勾选了放假)。回头需要算工作日的时候,一天天往后跳就是了。
0 请登录后投票
   发表时间:2004-08-26  
gigix 写道
我们的做法:有一个“节假日维护”,用户自己去输入哪几天放假(当然周六周日是默认已经勾选了放假)。回头需要算工作日的时候,一天天往后跳就是了。


可以输入自己的日期成为假日是最基本的功能吧.我的还有一个可以标记为公共假日(就是指定每年都相同),有一个性别的区分(是男的放假,还是女的放假,还是XX),有一个职工名单表(指定那些人可放假),有一个单位列表(指定那些单位可以放假).


如果是被标记为共公假期的话,每年的12月底,就会动用触发器,自动成生明年的假期.

当然你还可以选择删除,修改等.
0 请登录后投票
   发表时间:2004-08-26  
其实这里的关键是轮班倒换。我们的考勤系统1000个员工,居然出现>50种的轮班方式。有一个部门居然有20多种轮换(安保部门)。
有些人节假日休息,有些人不休息,即便休息,休息的也不一样。情况太多了,在我们这类工业企业里面更加突出。公司或者政府部门简单多了。商场也有点烦。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics