powershell 将字符串转换为时间跨度

goucqfw6  于 2023-08-05  发布在  Shell
关注(0)|答案(4)|浏览(115)

我是PowerShell的新手,我一直在尝试将此字符串转换为timespan对象:
“2天1小时15分钟”
我已经尝试了几种方法来输入格式使用parseexact,但我似乎不能得到正确的格式下来。
我试过这样的方法:

[TimeSpan]::ParseExact('2 Days 1 Hour 15 Minutes', 'd \Days h \Hour MM \Minutes', $null)

字符串

a7qyws3x

a7qyws3x1#

TimeSpan解析器非常敏感,你需要转义所有不是格式字符串说明符的内容:

[TimeSpan]::ParseExact('2 Days 1 Hour 15 Minutes', '%d\ \D\a\y\s\ %h\ \H\o\u\r\ %m\ \M\i\n\u\t\e\s', $null)

字符串
(我使用百分号表示说明符(%d而不是d),使它们在所有\中脱颖而出,但它们不是必需的)

qyuhtwio

qyuhtwio2#

字符串版本通常看起来像这样:'2.01:15:00',所以[timespan]'2.01:15'可以工作。

unftdfkk

unftdfkk3#

我很高兴看到你有答案。另一种方法是在正则表达式中使用命名捕获。

PS C:\> '2 Days 1 Hour 15 Minutes' -match '^(?<Days>\d+)\D*(?<Hours>\d+)\D*(?<Minutes>\d+)\D*'
True
PS C:\> $matches

Name                           Value
----                           -----
Hours                          1
Minutes                        15
Days                           2
0                              2 Days 1 Hour 15 Minutes

PS C:\> $Matches.Days
2
PS C:\> $Matches.Hours
1
PS C:\> $Matches.Minutes
15

PS C:\> $Ts = New-TimeSpan -days $Matches.Days -Hours $Matches.Hours -Minutes $Matches.Minutes
PS C:\> $Ts

Days              : 2
Hours             : 1
Minutes           : 15
Seconds           : 0
Milliseconds      : 0
Ticks             : 1773000000000
TotalDays         : 2.05208333333333
TotalHours        : 49.25
TotalMinutes      : 2955
TotalSeconds      : 177300
TotalMilliseconds : 177300000

字符串

nx7onnlm

nx7onnlm4#

将字符串转换为[timespan]时请注意。如果字符串为空,则会抛出InvalidCastParseTargetInvocationWithFormatProvider错误。

相关问题