vb 净排除两个日期时间之间的时间段
vb net exclude periods between two datetime
您好,我是 VB 网络中日期时间的新手,我正在尝试计算制作中某些操作的时间。例如:
starTtime="01.12.2018 07:00"
endTime ="01.12.2018 15:00"
我有两个没有工作的例子:
Pause1Start="01.12.2018 10:00"
Pause1Stop="01.12.2018 10:30"
Pause2Start="01.12.2018 14:00"
Pause2Stop="01.12.2018 14:30"
如何计算操作的使用时间?
并不总是这个例子,有必要检查两个日期时间之间是否包含暂停时间,或者是否有工作日结束、周末等...
所以操作可以一天开始,一天结束。
我想知道如何使用它?
谢谢
试试这个代码。我建议你定义暂停开始和结束的列表,然后遍历它们,检查特定暂停是否在工作时间内并将该时间以秒为单位添加到变量保持总秒数:
Sub Main()
Dim startTime = New DateTime(2018, 11, 1, 7, 0, 0)
Dim endTime = New DateTime(2018, 11, 1, 17, 0, 0)
Dim pauseStarts = New List(Of DateTime)
pauseStarts.Add(New DateTime(2018, 11, 1, 16, 0, 0))
pauseStarts.Add(New DateTime(2018, 11, 1, 10, 0, 0))
Dim pauseEnds = New List(Of DateTime)
' Add respective pause endings
pauseEnds.Add(New DateTime(2018, 11, 1, 18, 0, 0))
pauseEnds.Add(New DateTime(2018, 11, 1, 11, 30, 0))
Dim pauseSeconds As Long = 0
For i = 0 To pauseStarts.Count - 1
If pauseStarts(i) < endTime AndAlso pauseEnds(i) > startTime Then
' get the minimum from two times
Dim starting = If(startTime > pauseStarts(i), startTime, pauseStarts(i))
' get maximum from two times
Dim ending = If(endTime < pauseEnds(i), endTime, pauseEnds(i))
' add seconds during pause
pauseSeconds += (ending - starting).TotalSeconds
End If
Next
End Sub
您好,我是 VB 网络中日期时间的新手,我正在尝试计算制作中某些操作的时间。例如:
starTtime="01.12.2018 07:00"
endTime ="01.12.2018 15:00"
我有两个没有工作的例子:
Pause1Start="01.12.2018 10:00" Pause1Stop="01.12.2018 10:30"
Pause2Start="01.12.2018 14:00" Pause2Stop="01.12.2018 14:30"
如何计算操作的使用时间? 并不总是这个例子,有必要检查两个日期时间之间是否包含暂停时间,或者是否有工作日结束、周末等... 所以操作可以一天开始,一天结束。
我想知道如何使用它?
谢谢
试试这个代码。我建议你定义暂停开始和结束的列表,然后遍历它们,检查特定暂停是否在工作时间内并将该时间以秒为单位添加到变量保持总秒数:
Sub Main()
Dim startTime = New DateTime(2018, 11, 1, 7, 0, 0)
Dim endTime = New DateTime(2018, 11, 1, 17, 0, 0)
Dim pauseStarts = New List(Of DateTime)
pauseStarts.Add(New DateTime(2018, 11, 1, 16, 0, 0))
pauseStarts.Add(New DateTime(2018, 11, 1, 10, 0, 0))
Dim pauseEnds = New List(Of DateTime)
' Add respective pause endings
pauseEnds.Add(New DateTime(2018, 11, 1, 18, 0, 0))
pauseEnds.Add(New DateTime(2018, 11, 1, 11, 30, 0))
Dim pauseSeconds As Long = 0
For i = 0 To pauseStarts.Count - 1
If pauseStarts(i) < endTime AndAlso pauseEnds(i) > startTime Then
' get the minimum from two times
Dim starting = If(startTime > pauseStarts(i), startTime, pauseStarts(i))
' get maximum from two times
Dim ending = If(endTime < pauseEnds(i), endTime, pauseEnds(i))
' add seconds during pause
pauseSeconds += (ending - starting).TotalSeconds
End If
Next
End Sub