我必须计算每天系统用户的持续时间。所以,我有各种各样的过程,在一天的不同时间运行。我需要做的是将所有时间线合并为一个时间线,然后从那里计算出持续时间。我的问题是弄清楚重叠时间。
例如: 过程1从08:00到10:00运行 过程2从09:00到13:00运行 过程3从15:00到19:00运行 流程4从06:00到08:00运行
作为时间线的最终结果我需要的是: 时间线为06:00至13:00,15:00至19:00
我可以计算出持续时间,这只是最终的时间表。
有关方法的任何建议吗? 感谢
答案 0 :(得分:1)
如果相邻跨距之间存在间隙,则需要一个排序的跨度和循环列表,而不是组合重叠跨度并创建新的跨度。为了帮助您入门,这个概念证明代码
Dim sData
For Each sData In Array( _
"08:00-10:00 09:00-13:00 18:00-20:00 15:00-19:00 06:00-08:00" _
, "08:00-10:00 09:00-13:00 18:00-20:00 15:00-19:00 06:00-08:00 11:00-16:00" _
, "08:00-10:00 09:00-13:00 18:00-20:00 15:00-19:00 06:00-08:00 11:00-22:00" _
)
Dim alData : Set alData = CreateObject("System.Collections.ArrayList")
Dim sSpan
For Each sSpan In Split(sData)
alData.Add sSpan
Next
alData.Sort
For Each sSpan In alData
WScript.Echo sSpan
Next
WScript.Echo "-------------"
Dim aFromTo : aFromTo = Split(alData(0), "-")
Dim alResult : Set alResult = CreateObject("System.Collections.ArrayList")
Dim nCmp : nCmp = 0
alResult.Add aFromTo(0)
alResult.Add aFromTo(1)
Dim i
For i = 1 To (alData.Count - 1)
aFromTo = Split(alData(i), "-")
WScript.Echo alResult(nCmp), "-", alResult(nCmp + 1), " cmp ", aFromTo(0), "-", aFromTo(1)
Select Case True
Case aFromTo(0) <= alResult(nCmp + 1)
If aFromTo(1) > alResult(nCmp + 1) Then
alResult(nCmp + 1) = aFromTo(1)
End If
WScript.Echo "Combine ==>", alResult(nCmp), "-", alResult(nCmp + 1)
Case aFromTo(0) > alResult(nCmp + 1)
alResult.Add aFromTo(0)
alResult.Add aFromTo(1)
nCmp = nCmp + 2
WScript.Echo "New span", alResult(nCmp), "-", alResult(nCmp + 1)
Case Else
WScript.Echo "Surprise"
End Select
Next
WScript.Echo "-------------"
For i = 0 To (alResult.Count - 1) Step 2
WScript.Echo alResult(i + 0) & " to " & alResult(i + 1)
Next
WScript.Echo "#############"
Next
输出:
06:00-08:00
08:00-10:00
09:00-13:00
15:00-19:00
18:00-20:00
-------------
06:00 - 08:00 cmp 08:00 - 10:00
Combine ==> 06:00 - 10:00
06:00 - 10:00 cmp 09:00 - 13:00
Combine ==> 06:00 - 13:00
06:00 - 13:00 cmp 15:00 - 19:00
New span 15:00 - 19:00
15:00 - 19:00 cmp 18:00 - 20:00
Combine ==> 15:00 - 20:00
-------------
06:00 to 13:00
15:00 to 20:00
#############
06:00-08:00
08:00-10:00
09:00-13:00
11:00-16:00
15:00-19:00
18:00-20:00
-------------
06:00 - 08:00 cmp 08:00 - 10:00
Combine ==> 06:00 - 10:00
06:00 - 10:00 cmp 09:00 - 13:00
Combine ==> 06:00 - 13:00
06:00 - 13:00 cmp 11:00 - 16:00
Combine ==> 06:00 - 16:00
06:00 - 16:00 cmp 15:00 - 19:00
Combine ==> 06:00 - 19:00
06:00 - 19:00 cmp 18:00 - 20:00
Combine ==> 06:00 - 20:00
-------------
06:00 to 20:00
#############
06:00-08:00
08:00-10:00
09:00-13:00
11:00-22:00
15:00-19:00
18:00-20:00
-------------
06:00 - 08:00 cmp 08:00 - 10:00
Combine ==> 06:00 - 10:00
06:00 - 10:00 cmp 09:00 - 13:00
Combine ==> 06:00 - 13:00
06:00 - 13:00 cmp 11:00 - 22:00
Combine ==> 06:00 - 22:00
06:00 - 22:00 cmp 15:00 - 19:00
Combine ==> 06:00 - 22:00
06:00 - 22:00 cmp 18:00 - 20:00
Combine ==> 06:00 - 22:00
-------------
06:00 to 22:00
#############
应该使实验(和错误修复)变得容易。