You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Azure Recovery Services备份作业时长转换为可读格式?

如何将Azure Recovery Services备份作业的ISO 8601持续时间转换为可读格式

调用指定的Azure REST API获取备份作业信息时,返回的PSCustomObject中duration属性是ISO 8601格式的持续时间字符串(示例:PT3H41M37.2007037S),可以通过PowerShell的TimeSpan类来转换为可读格式,具体方案如下:

核心思路

ISO 8601标准的持续时间格式(以PT开头)是.NET TimeSpan类原生支持解析的,无需额外工具。我们只需要将字符串转换为TimeSpan对象,再按需格式化输出即可。

具体实现代码

基础转换与格式化

# 假设$job是API返回的PSCustomObject实例
$isoDuration = $job.duration

# 将ISO 8601字符串转换为TimeSpan对象
$timeSpan = [TimeSpan]::Parse($isoDuration)

# 格式化为时分秒带毫秒的标准格式(示例输出:03:41:37.2007037)
$readableDuration = $timeSpan.ToString("hh\:mm\:ss\.fffffff")

# 或者转换为更友好的中文描述格式(示例输出:3小时41分37秒)
$readableDuration = "{0}小时{1}分{2}秒" -f $timeSpan.Hours, $timeSpan.Minutes, $timeSpan.Seconds

# 如果需要保留毫秒精度
$readableDuration = "{0}小时{1}分{2}.{3}秒" -f $timeSpan.Hours, $timeSpan.Minutes, $timeSpan.Seconds, $timeSpan.Milliseconds

带异常处理的安全转换

如果担心字符串格式异常导致报错,可以使用TryParse方法做安全校验:

$isoDuration = $job.duration
$timeSpan = [TimeSpan]::Zero

if ([TimeSpan]::TryParse($isoDuration, [ref]$timeSpan)) {
    $readableDuration = $timeSpan.ToString("hh\:mm\:ss\.fffffff")
    Write-Host "作业持续时间:$readableDuration"
} else {
    Write-Warning "无法解析持续时间字符串:$isoDuration"
}

注意事项

你提到的ToDateTime方法用于解析日期时间字符串,不适用于持续时间类型的数据,因此必须使用TimeSpan类来处理这类ISO 8601时长格式。

内容的提问来源于stack exchange,提问作者Sean21735

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 22:52:37