我有不同类型的日期格式,如MM / d / yyyy,MM / dd / yyyy等。我想在PowerShell中将不同格式的字符串值解析为datetime。
[string []] $ format = @(" MM / d / yyyy hh:mm:ss tt"," M / d / yyyy hh:mm:ss tt" ," MM / dd / yyyy hh:mm:ss tt"," M / dd / yyyy hh:mm:ss tt")
$ dateString =" 11/8/2017 02:40:31 PM"
Write-Host([datetime] :: ParseExact($ dateString,$ format,$ null))
当我执行以上行时,我会遇到异常
异常调用" ParseExact"用" 3"参数:" String未被识别为有效的DateTime。" 在行:5 char:1 + Write-Host([datetime] :: ParseExact($ dateString,$ format,$ null)) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ + CategoryInfo:NotSpecified:(:) [],MethodInvocationException + FullyQualifiedErrorId:FormatException
我想将字符串值解析为datetime,字符串可以是任何格式。 任何人都可以告诉我如何使用PowerShell实现这一目标。 提前谢谢。
答案 0 :(得分:0)
此代码有效,但我没有找到使其与DateTime.ParseExact()的特定重载一起使用的方法。
[string[]] $format = @("MM/d/yyyy hh:mm:ss tt","M/d/yyyy hh:mm:ss tt","MM/dd/yyyy hh:mm:ss tt","M/dd/yyyy hh:mm:ss tt")
$dateString = "11/8/2017 02:40:31 PM"
$result = $null
$format.ForEach({ [DateTime] $dt = New-Object DateTime; if([datetime]::TryParseExact($dateString, $_, [System.Globalization.CultureInfo]::InvariantCulture, [System.Globalization.DateTimeStyles]::None, [ref] $dt)) { $result = $dt } });
Write-Host ($result)
输出:
11/8/2017 2:40:31 PM