文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>算法很重要,关于工时的计算,有空大家来讨论

算法很重要,关于工时的计算,有空大家来讨论

时间:2010-08-30  来源:YnioBa

今天,在群里面看到个朋友问了一个问题,问题很简单:

 

给你一个时间段判断,例如2010 - 8 - 9 15:00 到 2010 - 8 - 9 23:00

现有工作时间段:
8 - 12
14 - 18
20 - 24

请问如果2010 - 8 - 9 15:00 往前推进3个小时是那个班的那个工作时间,往后推7个小时呢?

 

假设当前是15时,往前推3个小时,要跳过非工作时段,准确的说,15-3,应该是在10点。而不是12点。

 

这个问题问了很久,很多人都回答了,但是对于跨天的时候,处理都不给力。我今天看到这个问题,我的第六感告诉我,这个就是个简单的循环队列问题。

我的想法就是一个队列指针,如果这个队列指针上的数据不在工作时间内的时候,队列指针+1,如果在工作时间内的话,计数器+1,队列指针+1,当计数器=你需要调整的时间的时候,就读取当前队列指针的数据。如果到了队列的尾部的时候,要处理一下,让队列指针从头开始。到了头部的时候,也是如此。

 

按照这个想法,我写了以下代码,写得不好,大家多讨论,抛砖引玉。

 

首先定义一个数组,0~23,内容如下:

 

1 public static int[] daySet = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 2, 2, 2, 2, 0, 0, 3, 3, 3, 3 };
2
3

 

 

 

下面的代码是往前倒推时间的:

           

 1 //往前
2 //textbox1
3 int baseTime = Convert.ToInt32(textBox4.Text.Trim());//计算实际的数组坐标
4 int prevTime = Convert.ToInt32(textBox1.Text.Trim());//往前多少时间
5 int dayAdjust = 0;//是否要调整天
6 int number=0;//计数器
7 int current=0;//当前队列指针
8 while (prevTime!=number)
9 {
10 current++;
11 if (baseTime == current)
12 {
13 baseTime = 23;
14 current = 0;
15 dayAdjust--;
16 }
17 if(daySet[baseTime-current]>0)
18 {
19 number++;
20 }
21
22 }
23
24 textBox3.Text = textBox1.Text.Trim() + "小时前,是" + dayAdjust.ToString() + "天前的" + daySet[baseTime - current].ToString() + "班," + (baseTime - current).ToString();
25
26

 

 

 

下面的代码是往后顺推时间的:

 

 1 //往后
2 //textBox2
3 int baseTime = Convert.ToInt32(textBox4.Text.Trim());//要计算的时间
4 int nextTime = Convert.ToInt32(textBox2.Text.Trim());
5 int dayAdjust = 0;//是否要调整天
6 int number = 0;//计数器
7 int current = 0;//当前队列指针
8 while (nextTime != number)
9 {
10 current++;
11 if ((baseTime + current) > 23)
12 {
13 baseTime = 0;
14 current = 0;
15 dayAdjust++;
16 }
17 if (daySet[baseTime + current] > 0)
18 {
19 number++;
20
21 }
22
23 }
24
25 textBox3.Text = textBox2.Text.Trim() + "小时后,是" + dayAdjust.ToString() + "天后的" + daySet[baseTime + current].ToString() + "班,"+(baseTime+current).ToString();
26
27
28

 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载