该文件包含以下内容。
START Sun 04/17/2022 13:01:44.13 END Sun 04/17/2022 14:41:50.60
我试图找到一种方法来自动计算从END到START的时间,我不关心秒数,只需要知道运行了多少分钟。在这个例子中,花了100分钟,但我不得不手动计算。我希望得到任何反馈。
END
START
rqdpfwrv1#
假设您的输入文件名为file.txt:
file.txt
$dates = [datetime[]] ((Get-Content file.txt) -replace '^\w+ +') [int] ($dates[1] - $dates[0]).TotalMinutes # -> 100
[datetime]
-replace
-replace '^\w+ +'
^
+
\w
_
Get-Content
[timespan]
.TotalMinutes
[double]
[int]
ql3eal8s2#
New-TimeSpan和DateTime对象示例中的ParseExact()或TryParse()方法将在此处提供帮助。
New-TimeSpan
DateTime
ParseExact()
TryParse()
$Start = [datetime]::ParseExact('04/17/2022 13:01:44.13', 'MM/dd/yyyy HH:mm:ss.ff', $null) $End = [datetime]::ParseExact('04/17/2022 14:41:50.60', 'MM/dd/yyyy HH:mm:ss.ff', $null) New-TimeSpan -Start $Start -End $End
这将提供如下所示的输出:
Days : 0 Hours : 1 Minutes : 40 Seconds : 6 Milliseconds : 470 Ticks : 60064700000 TotalDays : 0.0695193287037037 TotalHours : 1.66846388888889 TotalMinutes : 100.107833333333 TotalSeconds : 6006.47 TotalMilliseconds : 6006470
通过执行类似于以下操作的操作来访问特定的会议记录:
> $result = New-TimeSpan -Start $Start -End $End > $result.TotalMinutes 100.107833333333 # Round up to 2 decimal places > [Math]::Round($result.TotalMinutes, 2) 100.11 # Round up to 0 decimal places > [Math]::Round($result.TotalMinutes, 0) 100
2条答案
按热度按时间rqdpfwrv1#
假设您的输入文件名为
file.txt
:[datetime]
。-replace
运算符可以执行此操作:-replace '^\w+ +'
匹配字符串开头(^
)处的一个或多个(+
)单词字符(\w
、字母、数字或_
),后跟一个或多个空格,匹配类似于END
的字符串。由于未指定替换字符串,因此匹配的字符串实际上被 * 删除 *。-replace
可以作为其LHS对数组进行操作,在这种情况下,对每个元素执行操作;因此,如Get-Content
所返回的,输入文件的所有行都可以同时用作输入。[datetime]
示例相减,得到表示两个时间点之间的时间跨度的[timespan]
示例:.TotalMinutes
属性以分钟分数报告跨度(作为[double]
示例)[int]
会产生整数分钟数,并使用半到偶数的中点舍入。ql3eal8s2#
New-TimeSpan
和DateTime
对象示例中的ParseExact()
或TryParse()
方法将在此处提供帮助。这将提供如下所示的输出:
通过执行类似于以下操作的操作来访问特定的会议记录: