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

嵌套Try/Catch替代方案:PowerShell注册表日期转换优化咨询

问题背景

我需要将注册表中的日期转换为[Datetime]类型以进行相关操作,但受Autodesk特性影响,日期格式并不固定。同时要求在无法匹配到Autodesk可能使用的格式时抛出异常。

初始实现(存在代码异味)

最初采用嵌套try/catch的方式实现,但代码结构冗余、可读性差:

try {
$var1 = (Get-Date) - ([Datetime]::ParseExact(($key.installDate), 'yyyyMMdd', $null))
} catch {
try {
$var1 = (Get-Date) - ([Datetime]::ParseExact(($key.installDate), 'M/dd/yy', $null))
} catch {
try {
$var1 = (Get-Date) - ([Datetime]::ParseExact(($key.installDate), 'M/dd/yyyy', $null))
} catch {
throw "Date ($($key.installDate)) doesn't match any supported format"
}
}
}
优化后的实现

之后我改成了遍历格式列表的方式,代码结构有所改善,但想知道是否还有更优的方案:

:castDate foreach ($format in @('yyyyMMdd', 'M/dd/yyyy', 'M/dd/yy')) {
    try {
        $var1 = (Get-Date) - ([Datetime]::ParseExact(($key.installDate), $format, $null))
        break :castDate
    } catch {}
}
if (-not $var1) {
   throw "Date ($($key.installDate)) doesn't match any supported format"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 09:18:17