我在数组变量中有以下内容

Mon May  1 08:13:18 2017
Sat Apr 29 19:07:14 2017

In order to update the format and timezone, I have to run these two ParseExact commands first.

$time | ForEach-Object {$_ = [datetime]::ParseExact($_,'ddd MMM  d HH:mm:ss yyyy',[System.Globalization.CultureInfo]::InvariantCulture)}

$time | ForEach-Object {$_ = [datetime]::ParseExact($_,'ddd MMM dd HH:mm:ss yyyy',[System.Globalization.CultureInfo]::InvariantCulture)}

我失败了一个错误(这是预期的)

“带有” 3“参数的调用” ParseExact“的异常:”字符串未被识别为有效的DateTime。“
在D:\ UPDATING.ps1:
+ ... ach-Object {$ _ = [datetime]::ParseExact($ _ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~
+ CategoryInfo:未指定:(:) [],MethodInvocationException
+ FullyQualifiedErrorId:FormatException

从长远来看,一切正常,我可以进行格式化,但是我想知道这样做是否比使用2 parseExact更好?

最佳答案

ParseExact方法有多个重载。其中之一允许您指定要分析的多种日期模式:

$time = 'Sat Apr 29 19:07:14 2017', 'Mon May  1 08:13:18 2017'
$time | % { [DateTime]::ParseExact($_, [String[]]('ddd MMM  d HH:mm:ss yyyy',
                                                  'ddd MMM dd HH:mm:ss yyyy'), [CultureInfo]::InvariantCulture, 'None') }

也有重载,它允许您指定其他解析选项,例如[Globalization.DateTimeStyles]::AllowInnerWhite,以允许在解析的字符串中包含其他空格字符:
$time | % { [DateTime]::ParseExact($_, 'ddd MMM d HH:mm:ss yyyy', [CultureInfo]::InvariantCulture, 'AllowInnerWhite') }

07-26 02:07