vb net исключить периоды между двумя датами - PullRequest
0 голосов
/ 01 декабря 2018

Здравствуйте, я новичок в 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"

Как рассчитать использованное время для работы?Это не всегда этот пример, необходимо проверить, включено ли время паузы между двумя датами или если есть конец рабочего дня, выходные и т. Д. Так что операция может начаться через один день и завершиться через день.

Мне нужна идея, как с этим работать?

Спасибо

1 Ответ

0 голосов
/ 01 декабря 2018

Попробуйте этот код.Я предлагаю вам определить списки начала и окончания паузы, затем прокрутить их, проверить, была ли конкретная пауза в течение рабочего времени, и добавить это время в секундах к переменной, содержащей общее количество секунд:

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
...