如何使用Powershell或cmd计算文件中START和END时间之间的分钟差

rseugnpd  于 2023-01-05  发布在  Shell
关注(0)|答案(2)|浏览(178)

该文件包含以下内容。

START Sun 04/17/2022 13:01:44.13 
END   Sun 04/17/2022 14:41:50.60

我试图找到一种方法来自动计算从ENDSTART的时间,我不关心秒数,只需要知道运行了多少分钟。在这个例子中,花了100分钟,但我不得不手动计算。我希望得到任何反馈。

rqdpfwrv

rqdpfwrv1#

假设您的输入文件名为file.txt

$dates = [datetime[]] ((Get-Content file.txt) -replace '^\w+ +')
[int] ($dates[1] - $dates[0]).TotalMinutes  # -> 100
  • 日期时间字符串的格式可以直接转换为[datetime]
  • 要从每一行提取日期-时间字符串,必须删除第一个用空格分隔的标记,基于正则表达式的-replace运算符可以执行此操作:
  • -replace '^\w+ +'匹配字符串开头(^)处的一个或多个(+)单词字符(\w、字母、数字或_),后跟一个或多个空格,匹配类似于END的字符串。由于未指定替换字符串,因此匹配的字符串实际上被 * 删除 *。
  • -replace可以作为其LHS对数组进行操作,在这种情况下,对每个元素执行操作;因此,如Get-Content所返回的,输入文件的所有行都可以同时用作输入。
  • 将两个[datetime]示例相减,得到表示两个时间点之间的时间跨度的[timespan]示例:
  • .TotalMinutes属性以分钟分数报告跨度(作为[double]示例)
  • 将该值转换为[int]会产生整数分钟数,并使用半到偶数的中点舍入。
ql3eal8s

ql3eal8s2#

New-TimeSpanDateTime对象示例中的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

相关问题