powershell - 如何从来自文件的多个开始时间和结束时间获取时差?
问题描述
我有以下数据的文件,我想使用 PowerShell 从中获得最大的时差。
STARTTIME:2018-12-01 04:13:15
ENDTIME:2018-12-01 04:17:15
--
--
STARTTIME:2018-12-01 04:11:15
ENDTIME:2018-12-01 04:13:15
--
STARTTIME:2018-12-01 04:10:15
ENDTIME:2018-12-01 04:10:40
我希望输出为 00:04:00
解决方案
使用正则表达式选择行和STARTTIME
/ENDTIME
设置具有该名称和 [datetime] 值的变量
## Q:\Test\2019\05\15\SO_56150523.ps1
$FileIn = '.\times.txt'
$RE = [regex]'^(STARTTIME|ENDTIME):(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})'
$Data = (Get-Content $FileIn)| Where-Object {$_ -match $RE}| ForEach-Object{
Set-Variable -Name $Matches[1] -Value (Get-Date $Matches[2])
if ($Matches[1] -eq 'ENDTIME'){
[PSCustomObject]@{
StartTime = $StartTime
EndTime = $EndTime
Duration = New-TimeSpan -Start $StartTime -End $EndTime
}
}
}
$Data
"`nThe longest duration is {0}" -f ($Data|Sort-Object Duration -Descending)[0].Duration
基于文件中问题的完整文本的示例输出times.txt
> Q:\Test\2019\05\15\SO_56150523.ps1
StartTime EndTime Duration
--------- ------- --------
2018-12-01 04:13:15 2018-12-01 04:17:15 00:04:00
2018-12-01 04:11:15 2018-12-01 04:13:15 00:02:00
2018-12-01 04:10:15 2018-12-01 04:10:40 00:00:25
The longest duration is 00:04:00
推荐阅读
- scala - 我无法在 scala-shell 中加载 myfile.scala
- java - arrayList 似乎仅在首先完成一项活动而不是另一项活动时才创建
- c# - 如何在 C# 中使用 XML 创建注册和登录表单?
- angular - 抽象类中与另一个类有关系的反序列化问题
- netbeans - Win10卸载NB9.0
- asp.net-core - ASP.NET Core url 仅重写域
- java - getLargePrime Java 循环
- reactjs - 找不到反应包中的离子模态控制器
- r - 如何更改 selectInput 中选项的名称以避免使用 URL 作为选项?
- r - 计算两个特定行之间的行数