需求实现下面三个接口
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、给定一个开始时间和结束时间判断其间的工作分钟数
int WorktimeSpan(DateTime startTime,DateTime endTime)
2、给定一个开始时间和工作分钟数,推算出下一个工作时间(可以前后)
DateTime WorktimeAfter(DateTime startTime,int span)
3、判断一个时刻是否为工作时间
bool IsWorktime(Datetime theTime)
数据库表配置的工作时间为
1、记录了一天的哪个时段是休息哪个时段为工作
2、记录了按周循环的哪些时段是休息、哪些时段是工作。
3、记录了按月循环的法定假日
4、记录了按年循环的法定假日
5、还记录了一些特殊的时段是工作还休息。(比如停电三天,放假三天)
要求算法能够在1ms下完成任意时间段的判定。
解决方案 »
- windowsforms的分析网页软件
- 为什么我觉得在项目中没办法用上设计模式里的那些东东?还有UML建模,感觉总是没地方可以用上.请朋友们点播一二.
- 一个关于让程序暂时中断的问题
- Winform datagrid怎样让它不默认选中单元格
- GRID绑定问题
- 一个C#计算器源代码,不知道哪里出错了
- 求助:关于数据库中image图片读取的问题
- 在64位win8下使用vs.net2012(无补丁)编译vc程序,到32为xp下提示“不是有效的win32程序”,在本机可以运行
- oracle表中为Number类型的字段,为什么不能插入long长整型,只能插入Integer?
- C# 线程 System.NullReferenceException
- 刚上路的菜鸟
- 正则表达式的最小匹配问题(请高手指点)
关键在机器性能吧?
数据库使用大型的吧.对速度的提高很有帮助.不过网络传送也不止1ms啊.
不成就用多线程吧.用不同的线程完成不同的任务.再由调度线程取得所有数据进行统一处理.
不过时间也应当在1ms以上.
3类似于sqlserver的作业调度的设置,可以参考decorator模式的实现,实例化时,根据数据库信息构造5层嵌套条件判断。
3、判断一个时刻是否为工作时间
bool IsWorktime(Datetime theTime)你先从特殊时间表里面查询是否包含该时间,没有则直接判断是一周中的哪一天,再判断是否在该天的工作时间范围内,这样就可确定是否是工作时间。
2、给定一个开始时间和工作分钟数,推算出下一个工作时间(可以前后)
DateTime WorktimeAfter(DateTime startTime,int span)
如果span等于100000的话可能就要算一段时间了
应该从设计上找办法,优化数据结构
<!--轮回模式,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>
theforever(碧海情天)
我的必要性是,当一个用户有300个任务需要判断其超过规定办结的时长时,根据超过的时长和规定时限比较,我们要做不同程度的惩罚。对不同用户作相同程度的惩罚时,我们允许超时时长不一样。比如:局长超过12个工作时我们给警告,而科长超过5个工作时我们就警告。这样,对一个用户的每个未办完的任务都要判断到当前时刻已经历的工作分钟数。假设每个任务判定需要15ms,则0.015*300=4.5s,在加上网络传输和显示的时间这意味着用户需要等待近5s才能获得响应。
如果你们的"数据库中有108条上下班配置,包括特殊日期配置,周一到周日的上下班配置"
是不经常变动的
是否可以考虑在任务信息中增加一个字段,保存任务过期时间(可根据任务责任人具体来算,
这样一个任务算一次应该是不会太慢的),查询的时候我想应该能满足需要了这只是一个简单的思路,其实没有什么方法是任何时候都适用的,具体问题要具体分析,我认为
SPAN的方法```还是类样`System.DateTime startTime = (System.DateTime)Application["StartTime"];
System.DateTime endTime = System.DateTime.Now;
System.TimeSpan ts = endTime - startTime;
Response.Write("页面执行时间:"+ ts.Milliseconds +" 毫秒");