首页 > 解决方案 > Powershell - [DateTime]::TryParseExact,两个明显相同的字符串,一个有效,另一个无效

问题描述

在powershell中,我有一个我期望的日期是一个字符串,另一个是我为调试目的而创建的一个字符串。

function ParseDate {
param
(
    $inputDate #when debugging this outputs - 04/11/2021 23:00
)
    $date = "04/11/2021 23:00" #hard coded for debugging

    $parsedDate = [DateTime]::MinValue;
    # $date here, which I had for debugging, $inputDate will fail for parse 
    $parsedSuccessfully = [DateTime]::TryParseExact($date, "dd/MM/yyyy HH:mm", $null, [System.Globalization.DateTimeStyles]::None, [ref] $parsedDate);  

    return $parsedDate 
}

如果我解析硬编码的日期($date)那么它工作正常,但如果我解析 $inputDate 它失败并且 $parsedSuccessfully 将是错误的。

如果我在两个对象上输出 GetType() 则它返回相同的类型 -

IsPublic IsSerial Name                                     BaseType                                                                                                                  
-------- -------- ----                                     --------                                                                                                                  
True     True     String                                   System.Object  

有什么方法可以告诉 inputDate 和硬编码日期之间的区别是什么,因为有些东西必须不同,因为一个有效而另一个无效。

标签: powershelldate

解决方案


在此处查看此答案-https: //stackoverflow.com/a/67228497/440760 是的,这也是我的问题!

本质上用于write-host( $tmp.ToCharArray() | % { [int] $_ })以十六进制显示文本。这清楚地表明存在差异。

在我的情况下 - 8206 48 52 47 8206 49 49 47 8206 50 48 50 49 32 8207 8206 49 51 58 49 57(没用)和 48 52 47 49 49 47 50 48 50 49 4957 49 51 8 )。

额外的字符是 BSTR 可以使用删除

$formattedDateString = $value -replace '[^\p{L}\p{Nd}\:\/\ ]', ''

推荐阅读