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

PowerShell中[DateTime]::TryParseExact对两个外观相同字符串解析结果不一致问题

问题定位与解决方法

第一步:逐字符对比字符串编码,排查不可见/非标准字符

两个字符串打印外观一致但实际内容不同,几乎都是由不可见字符或者全角/半角字符差异导致的,使用以下方法输出每个字符的Unicode编码直接对比:

# 输出字符串每个字符的对应Unicode编码
function Show-StringCharCodes {
    param([string]$str)
    Write-Host "字符串长度: $($str.Length)"
    for ($i=0; $i -lt $str.Length; $i++) {
        Write-Host "索引 $i : 字符 '$($str[$i])' , 编码 $([int]$str[$i])"
    }
}

# 调用方法对比两个字符串
Show-StringCharCodes $date
Show-StringCharCodes $inputDate

常见差异类型:

  • 长度不同:说明$inputDate首尾存在空白、换行、零宽空格(Unicode编码8203)、不间断空格(Unicode编码160)等打印不可见的字符
  • 相同索引位置编码不同:最常见为日期分隔符实际为全角斜杠/(编码65295)、时间冒号为全角冒号:(编码65306),和半角符号外观几乎无差异

第二步:快速验证解析问题

如果确认是字符格式问题,可以先对输入做清洗后再尝试解析:

# 移除所有不可见控制字符
$cleanInput = $inputDate -replace '[\p{C}]',''
# 统一替换全角分隔符为半角
$cleanInput = $cleanInput -replace '/','/' -replace ':',':'
# 再次尝试解析
$parsedSuccessfully = [DateTime]::TryParseExact($cleanInput, "dd/MM/yyyy HH:mm", $null, [System.Globalization.DateTimeStyles]::None, [ref]$parsedDate)

常见隐藏坑点说明

TryParseExact方法的格式字符串中,/是日期分隔符占位符,默认会被替换为当前系统区域的默认日期分隔符,不是严格匹配半角斜杠。如果要强制匹配半角斜杠,需要把格式字符串转义为:
"dd'/'MM'/'yyyy HH:mm"


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:27:05