需求实现下面三个接口
1、给定一个开始时间和结束时间判断其间的工作分钟数
int WorktimeSpan(DateTime startTime,DateTime endTime)
2、给定一个开始时间和工作分钟数,推算出下一个工作时间(可以前后)
DateTime WorktimeAfter(DateTime startTime,int span)
3、判断一个时刻是否为工作时间
bool IsWorktime(Datetime theTime)
数据库表配置的工作时间为
1、记录了一天的哪个时段是休息哪个时段为工作
2、记录了按周循环的哪些时段是休息、哪些时段是工作。
3、记录了按月循环的法定假日
4、记录了按年循环的法定假日
5、还记录了一些特殊的时段是工作还休息。(比如停电三天,放假三天)
要求算法能够在1ms下完成任意时间段的判定。

解决方案 »

  1.   

    好像你的要求1ms很难完成.
    关键在机器性能吧?
    数据库使用大型的吧.对速度的提高很有帮助.不过网络传送也不止1ms啊.
    不成就用多线程吧.用不同的线程完成不同的任务.再由调度线程取得所有数据进行统一处理.
    不过时间也应当在1ms以上.
      

  2.   

    1,2为datetime类型的加减,容易实现
    3类似于sqlserver的作业调度的设置,可以参考decorator模式的实现,实例化时,根据数据库信息构造5层嵌套条件判断。
      

  3.   

    12问题前面已经说明。
    3、判断一个时刻是否为工作时间
    bool IsWorktime(Datetime theTime)你先从特殊时间表里面查询是否包含该时间,没有则直接判断是一周中的哪一天,再判断是否在该天的工作时间范围内,这样就可确定是否是工作时间。
      

  4.   

    你的需求应该是对性能有要求
    2、给定一个开始时间和工作分钟数,推算出下一个工作时间(可以前后)
    DateTime WorktimeAfter(DateTime startTime,int span)
    如果span等于100000的话可能就要算一段时间了
    应该从设计上找办法,优化数据结构
      

  5.   

    108条上下班配置可以事先实例化为判定条件对象,分为5类分别对应传入时间的年月周日属性,条件发生改变时在刷新缓存,因此实例化的时间不应再1ms内,108条上下班配置是否可以再优化,如第5,过期后应将条件删除,1-4的条件该不会这么多,如周末双休该是一个条件,而不是一年中所有的双休日。还有1ms时间的测量使用datetime相加减可能会有误差.
      

  6.   

    没有什么特定要求下,15MS和1MS又有什么区别? 除非是闲着了或者喜欢显摆。
      

  7.   

    我的数据结构如下:
    <!--轮回模式,0:按天,1:按周,2:按月,3:按年,4:按时间段,数值同时表示其计算的优先级别--><Worktime>
      <item>
        <ID>57D7C079-42A2-4DF9-876B-03B6584B39C9</ID>
        <OwnerID>00000000-0000-0000-0000-000000000000</OwnerID><!--这项配置针对的用户-->
        <StartTime>2005-05-03T08:00:00</StartTime>
        <EndTime>2005-05-03T11:59:59</EndTime>
        <IsWork>0</IsWork><!--0:休息;1:工作-->
        <RepeatMode>4</RepeatMode><!--轮回模式-->
        <Enabled>1</Enabled><!--0:无效-->
        <Description></Description>
      </item>
    </Worktime>
      

  8.   

    你好:
    theforever(碧海情天) 
    我的必要性是,当一个用户有300个任务需要判断其超过规定办结的时长时,根据超过的时长和规定时限比较,我们要做不同程度的惩罚。对不同用户作相同程度的惩罚时,我们允许超时时长不一样。比如:局长超过12个工作时我们给警告,而科长超过5个工作时我们就警告。这样,对一个用户的每个未办完的任务都要判断到当前时刻已经历的工作分钟数。假设每个任务判定需要15ms,则0.015*300=4.5s,在加上网络传输和显示的时间这意味着用户需要等待近5s才能获得响应。
      

  9.   

    to gxuqin(皇帝) 
    如果你们的"数据库中有108条上下班配置,包括特殊日期配置,周一到周日的上下班配置"
    是不经常变动的
    是否可以考虑在任务信息中增加一个字段,保存任务过期时间(可根据任务责任人具体来算,
    这样一个任务算一次应该是不会太慢的),查询的时候我想应该能满足需要了这只是一个简单的思路,其实没有什么方法是任何时候都适用的,具体问题要具体分析,我认为
      

  10.   

    好象有个啥`
    SPAN的方法```还是类样`System.DateTime startTime = (System.DateTime)Application["StartTime"];
    System.DateTime endTime = System.DateTime.Now;
    System.TimeSpan ts = endTime - startTime;
    Response.Write("页面执行时间:"+ ts.Milliseconds +" 毫秒");
      

  11.   

    test33(隐姓埋名) :问题不是你想象的那样。