想做一个统计工作天数的模块,碰到假日的问题 一个公司的系统,有这么一个模块。就是根据当前时间,还有一个项任务的工作时间,来得到结束的具体时间。这里面有个比较难的设计就是怎么去考虑这工作时间内的假日问题。要知道假日是不能统计到工作天数中去的。假日可以由管理员添加,修改,删除。添加的时候是按照起始时间,假日的天数。有公共的假日,也有公司的休息假日,还有一些特别的假日。我是个菜鸟。我就想问问怎么去设计比较好。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 设计假日(Holiday)接口比如boolean isHoliday(Calendar cd);实现公共假日PublicHoliday(固定代码)实现可管理的假日ManageableHoliday 根据管理员设置的假日做个单例bean(也许有存在的系统级bean作为宿主),保存假日集合需要统计天数的时候 循环下假日集合呵呵,很不成熟的设计,lz参考 给你一段代码 也是我从网上找来的 与你的问题有点关系 呵呵 基于oracleCREATE OR REPLACE FUNCTION Get_WorkingDays( ny IN VARCHAR2) RETURN INTEGER IS/*-----------------------------------------------------------------------------------------函数名称:Get_WorkingDays中文名称:求某一年月中共有多少工作日作者姓名: XINGPING编写时间: 2004-05-23输入参数:NY:所求包含工作日数的年月,格式为yyyymm,如200405返 回 值:整型值,包含的工作日数目。算法描述:使用Last_day函数计算出参数所给年月共包含多少天,根据这个值来构造一个循环。在这个循环中先求这个月的每一天与一个已知是星期天的日 期(2001-12-30是星期天)的差,所得的差再对7求模。如果所求日期在2001-12-30以前,那么所得的差既是负数,求模后所得值范围为大于 -6,小于0,如-1表示星期六,故先将求模的结果加7,再求7的模. 如过所得值不等于0和6(即不是星期六和星期天),则算一个工作日。 ----------------------------------------------------------------------------------------*/ Result INTEGER := 0; myts INTEGER; --所给年月的天数 scts INTEGER; --某天距2001-12-30所差的天数 rq DATE; djt INTEGER := 1; -- BEGIN myts := to_char(last_day(to_date(ny,'yyyymm')),'dd'); LOOP rq := TO_date(ny||substr(100+djt,2),'yyyymmdd'); scts := rq - to_date('2001-12-30','yyyy-mm-dd'); IF MOD(MOD(scts,7)+7,7) NOT IN(0,6) THEN Result := Result + 1; END IF; djt := djt + 1; EXIT WHEN djt>myts; END LOOP; RETURN Result; END Get_WorkingDays; 请问SQL语句,存储过程,索引的区别? Struts2中的“input”代表什么含义? jsp 请教java解析xml 为什么我在myeclipse里建不了Servlet ? 在下拉列表框中显示多列 查询结果显示不出来??!! 如果用在个JSP页面直接显示EXCEL内容? jspsmartupload的两个问题? 客户端传值问题 请高手进来看看 哪个搜索资料最准
设计假日(Holiday)接口
比如
boolean isHoliday(Calendar cd);
实现公共假日PublicHoliday(固定代码)实现可管理的假日ManageableHoliday 根据管理员设置的假日
做个单例bean(也许有存在的系统级bean作为宿主),保存假日集合需要统计天数的时候 循环下假日集合呵呵,很不成熟的设计,lz参考
CREATE OR REPLACE FUNCTION Get_WorkingDays(
ny IN VARCHAR2
) RETURN INTEGER IS
/*-----------------------------------------------------------------------------------------
函数名称:Get_WorkingDays
中文名称:求某一年月中共有多少工作日
作者姓名: XINGPING
编写时间: 2004-05-23
输入参数:NY:所求包含工作日数的年月,格式为yyyymm,如200405
返 回 值:整型值,包含的工作日数目。
算法描述:使用Last_day函数计算出参数所给年月共包含多少天,根据这个值来构造一个循环。在这个循环中先求这个月的每一天与一个已知是星期天的日 期(2001-12-30是星期天)的差,所得的差再对7求模。如果所求日期在2001-12-30以前,那么所得的差既是负数,求模后所得值范围为大于 -6,小于0,如-1表示星期六,故先将求模的结果加7,再求7的模. 如过所得值不等于0和6(即不是星期六和星期天),则算一个工作日。
----------------------------------------------------------------------------------------*/
Result INTEGER := 0;
myts INTEGER; --所给年月的天数
scts INTEGER; --某天距2001-12-30所差的天数
rq DATE;
djt INTEGER := 1; --
BEGIN
myts := to_char(last_day(to_date(ny,'yyyymm')),'dd');
LOOP
rq := TO_date(ny||substr(100+djt,2),'yyyymmdd');
scts := rq - to_date('2001-12-30','yyyy-mm-dd');
IF MOD(MOD(scts,7)+7,7) NOT IN(0,6) THEN
Result := Result + 1;
END IF;
djt := djt + 1;
EXIT WHEN djt>myts;
END LOOP;
RETURN Result;
END Get_WorkingDays;