PowerShell中如何将指定格式字符串转换为TimeSpan对象
PowerShell时间字符串转TimeSpan对象正确实现
你原来的代码存在三个核心错误:
- 使用
MM作为分钟格式符:该符号属于DateTime类型的月份格式符,TimeSpan的分钟格式符为小写m - 字面量转义逻辑错误:仅用
\转义只能生效单个字符,\Days仅转义了首字母D,后续的ays会被误识别为格式符导致匹配失败 - 单字符格式符未加
%前缀:单独使用d、h、m这类单字符TimeSpan格式符时,必须加%前缀明确标识为单字符格式,否则会被解析为多字符格式符
适配当前输入的写法
针对你给出的2 Days 1 Hour 15 Minutes格式,直接使用以下代码即可完成转换:
[TimeSpan]::ParseExact('2 Days 1 Hour 15 Minutes', "%d' Days '%h' Hour '%m' Minutes", $null)
兼容单复数场景的写法
如果你的输入可能出现1 Day、1 Minute这类单数表述,可以传入多格式数组兼容不同情况:
# 定义所有可能匹配的格式 $timeFormats = @( "%d' Days '%h' Hours '%m' Minutes", "%d' Days '%h' Hour '%m' Minutes", "%d' Day '%h' Hours '%m' Minutes", "%d' Day '%h' Hour '%m' Minutes", "%d' Days '%h' Hour '%m' Minute", "%d' Day '%h' Hour '%m' Minute" ) # 转换时自动匹配对应格式 [TimeSpan]::ParseExact('1 Day 1 Hour 2 Minute', $timeFormats, $null)
内容的提问来源于stack exchange,提问作者Bob Miller
相关产品推荐
相关产品推荐

