Математическая функция для расчета временного интервала на следующий день - PullRequest
0 голосов
/ 08 апреля 2020

Привет, ребята. Сейчас я пишу сценарий PowerShell, который в основном читает файл, в котором он ищет шаблон и получает время. Значения, такие как: 15:22:33. Значения хранятся в 2 массивах - Out Array и In Array, которые оба содержат значения одного и того же типа.

Поэтому я вычитаю 2 значения и создаю интервал времени, который, например, рассчитывает время между этими двумя значения.

  1. 11: 20: 33 и 2. 12:21:33 - поэтому интервал времени правильно показывает мне, что разница составляет 01:01:00, что правильно c.

Теперь моя проблема в том, что мне также нужно вычислить разницу, если следующая дата будет завтра.

Итак, возьмем этот пример:

  1. 12: 00: 00 и 2. 05:00:00 - если я использую ту же функцию, что и выше, просто вычтите значения, которые я получу -07: 00: 00, но нужное мне значение будет 17:00:00.

Как будет выглядеть математическая функция для вычисления значения на следующий день? Я могу проверить это с помощью инструкции IF, потому что, если второе значение меньше, чем первое, очевидно, на следующий день. Но я действительно не знаю, как правильно оценить c время.

Какой-то код:

for($i = 0; $i -lt $outVar.Length; $i++) {
    $testOut = $outVar[$i].Line.Split("(")[0]
    $testIn  = $inVar[$i].Line.Split("(")[0]

    $userOut = $outVar[$i].Line.Split('"')[2]
    $userIn = $inVar[$i].Line.Split('"')[2]

    #$testOut + $testIn                                          
    $ConvertedStart = [datetime]::Parse($testOut)
    $ConvertedEnd = [datetime]::Parse($testIn)

    $loggedTimeTestSTART = New-TimeSpan  $ConvertedStart
    $loggedTimeTestEND = New-TimeSpan  $ConvertedEnd

    [System.Collections.ArrayList]$resultArray = @();            



    if($loggedTimeTestSTART -gt $loggedTimeTestEND) {
        $loggedTimeTestFinal = $loggedTimeTestSTART.Subtract($loggedTimeTestEND)
       # $resultArray.Add($loggedTimeTestFinal)
        #$resultArray += $loggedTimeTestFinal
        $array += $loggedTimeTestFinal.ToString() + $userOut
        } else {
            $loggedTimeTestFinal = "Minus cuz next day " + $loggedTimeTestSTART.Subtract($loggedTimeTestEND) 
           # $resultArray.Add($loggedTimeTestFinal);
            #$resultArray += $loggedTimeTestFinal 
            $array += $loggedTimeTestFinal.ToString() + $userOut
        }

    }

, как вы можете видеть в моем случае Если части else нужно будет выполнить какой-то другой расчет, чтобы получить разницу в реальном времени (временной интервал) между двумя значениями, если второе один поменьше.

1 Ответ

3 голосов
/ 08 апреля 2020

Сохраните первый элемент ($a) как [TimeSpan] и преобразуйте второй ($b) в [DateTime]. Затем вычтите [TimeSpan] из [DateTime] и выберите часть TimeOfDay, чтобы получить разницу во времени:

$a = [TimeSpan]'11:20:33'
$b = [DateTime]'12:21:33'
($b - $a).TimeOfDay

выход:

Days              : 0
Hours             : 1
Minutes           : 1
Seconds           : 0
Milliseconds      : 0
Ticks             : 36600000000
TotalDays         : 0.0423611111111111
TotalHours        : 1.01666666666667
TotalMinutes      : 61
TotalSeconds      : 3660
TotalMilliseconds : 3660000

$a = [TimeSpan]'12:00:00'
$b = [DateTime]'05:00:00'
($b - $a).TimeOfDay

выход:

Days              : 0
Hours             : 17
Minutes           : 0
Seconds           : 0
Milliseconds      : 0
Ticks             : 612000000000
TotalDays         : 0.708333333333333
TotalHours        : 17
TotalMinutes      : 1020
TotalSeconds      : 61200
TotalMilliseconds : 61200000

В качестве альтернативы, вы можете просто добавить один день, если результат меньше 0:

$a = [TimeSpan]'12:00:00'
$b = [TimeSpan]'05:00:00'
$Result = $b - $a
If ($Result -lt 0) {$Result += [TimeSpan]'1:00:00:00'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...