代码之家  ›  专栏  ›  技术社区  ›  sandeep

ParseExact和TryParseExact方法不接受powershell脚本中的多种日期格式

  •  1
  • sandeep  · 技术社区  · 7 年前

    我有不同类型的日期格式,比如 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))
    

    当我在上面执行时,我在下面执行异常

    Exception calling "ParseExact" with "3" argument(s): "String was not recognized as a valid DateTime."
    At line:5 char:1
    + Write-Host ([datetime]::ParseExact($dateString, $format, $null))
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : FormatException
    

    我想将字符串值解析为datetime,字符串可以是任何格式。 提前谢谢。

    1 回复  |  直到 4 年前
        1
  •  1
  •   sɐunıɔןɐqɐp Zmey    7 年前

    这段代码可以工作,尽管我没有找到一种方法使它能够处理特定的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