日期:2014-05-19  浏览次数:20802 次

请大家帮忙看下这个算法应该怎么实现
很急,希望大家能帮下我
问题:
比如A上6月1日0-6点
        B上6月1日6-12点
        C上6月1日12-18点
        D上6月1日18-24点
        E上6月2日的0点-6点了
        A上6月2日的6-12点了
        B上6月2日12-18点了
依次类推,
规律就这样循环,那么我怎么写个代码来判断某天的时候他们是上几点--几点的班啊?
比如我现在是7月3日,我怎么判断这个时候A上几点的班?E上几点的班?然后我要按照他们上7月3日对应时间段去数据库里面读数据的,大家提供下好方法吧~我就80分了,全送了


------解决方案--------------------
帮你顶一下~~~
------解决方案--------------------
0-6 6-12 12-18 18-24
a b c d
e a b c
d e a b
c d e a
b c d e
a b c d
…………………………

每五天一轮 你只需要计算出当前时间和基准时间的天数差值对5求余数即可
------解决方案--------------------
int iDateSpan;
if(iDateSpan> =5)
{
iDateSpan = iDateSpan%5;
}
switch (iDateSpan)
{
case 0 :
{
TODO//a的时间为 0-6,b的时间为6-12,c的时间为12-18,d的时间为18-24,e当天没班
break;
}
case 1 :
{
break;
}
case 2 :
{
break;
}
case 3 :
{
break;
}
case 4 :
{
break;
}
}
------解决方案--------------------
DateTime dt1 = new DateTime(2007, 7, 1);
DateTime dt2 = new DateTime(2007, 6, 25);
TimeSpan ts = dt1 - dt2;
int iDateSpan = ts.Days;
------解决方案--------------------
1、每30小时轮流一次
2、const int INTERVAL = 30; //单位小时
DateTime dt2 = new DateTime(2007,7,3);
DateTime dt1 = new DateTime(2007,6,1);
TimeSpan ts = dt2 - dt1;
DateTime dt = dt2.AddHours(30 - Convert.ToInt32(ts.TotalHours)%30);
if(dt.Date> dt2.Date)
{
//没有值班
}
else
{
//dt.Hour至dt.Hour+6值班
}
------解决方案--------------------
((当前时间-排班起始时间)/当班时间) mod 总班次=当前时间当班班次

int i = (System.DateTime.Now.Subtract( '2007-06-01 00:00:00 ').Hours/6)%5
switch (i)
{
case 1:A
case 2:B
case 3:C
case 4:D
case 5:E
}
------解决方案--------------------
/// <summary>
/// 获取要查询的日期时要查询的人所要上班的时间段
/// </summary>
/// <param name= "time "> 要查询的日期 </param>
/// <param name= "person "> 要查询的人(Value: A, B, C, D, E) </param>
/// <returns> 返回该人在当天所要上班的时间段
/// 返回 1 表示上 0 - 6 点
/// 返回 2 表示上 6 - 12 点
/// 返回 3 表示上 12 - 18 点
/// 返回 4 表示上 18 - 24 点
/// 返回 0 表示当天不上班
/// </returns>
public static int GetPeriod(DateTime queryTime, char person) {
DateTime startTime = new DateTime(2007, 6, 1);
TimeSpan span = queryTime - startTime;
int add = 0;
int turn = (span.Days + 1) % 5;

switch (person) {
case 'A ': add = 0; break;
case 'B ': add = 1; break;
case 'C ': add = 2; break;
case 'D ': add = 3; break;
case 'E ': add = 4; break;