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

PowerShell中如何将带逗号小数秒的ISO 8601时间戳转为原生DateTime对象

问题原因

PowerShell 的 Get-Date 命令依赖 .NET 内置的 DateTime 类型解析逻辑,默认仅支持点号作为小数秒分隔符,因此尽管逗号作为小数秒分隔符符合 ISO 8601 标准,也会被判定为无效格式。

解决方案1:字符串预处理(最简洁通用)

先把时间戳中的逗号统一替换为点号,再传入 Get-Date 即可。该方案天然兼容逗号、点号、无小数秒三种场景,替换操作不会影响原本就符合要求的时间戳格式:

$strTimestamp = '2021-08-31T23:12:11,5-05:00'
# 统一替换逗号为点号,无逗号的字符串不会产生任何变更
$processedTime = $strTimestamp -replace ',', '.'
$datetimeObj = Get-Date -Date $processedTime

执行后输出的 DateTime 对象和直接使用点号格式的解析结果完全一致,毫秒值为500,时区转换逻辑正常。

解决方案2:精确格式匹配(高严谨性场景)

如果需要避免误替换时间戳中其他位置的逗号(极端场景下的需求),可以使用 DateTime.ParseExact 方法,显式指定所有需要兼容的格式模板:

$strTimestamp = '2021-08-31T23:12:11,5-05:00'
# 定义所有需要兼容的格式模板,可按需补充更多小数位的格式
$allowedFormats = @(
    # 逗号分隔小数秒的格式
    "yyyy-MM-ddTHH:mm:sszzz",
    "yyyy-MM-ddTHH:mm:ss,fzzz",
    "yyyy-MM-ddTHH:mm:ss,ffzzz",
    "yyyy-MM-ddTHH:mm:ss,fffzzz",
    # 点号分隔小数秒的格式
    "yyyy-MM-ddTHH:mm:ss.fzzz",
    "yyyy-MM-ddTHH:mm:ss.ffzzz",
    "yyyy-MM-ddTHH:mm:ss.fffzzz"
)
$datetimeObj = [datetime]::ParseExact($strTimestamp, $allowedFormats, [Globalization.CultureInfo]::InvariantCulture)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:21:02