如何在ps中读取奇怪的日期时间格式

时间:2019-03-08 17:00:42

标签: powershell datetime

我尝试了几次,但从未成功。我尝试将字符串作为日期时间读取,以便在第二步中将其转换为另一种输出格式...

[datetime]::ParseExact("26th June 2017 13:38","ddth MMMM yyyy HH:mm", $null)

  1. 可以用通用的东西代替th格式的东西,所以我可以避免出现包含th, st的情况?

  2. 我也尝试了不使用th的情况,但它没有任何解决方案或其他方法,但没有用吗?

    [datetime]::ParseExact("26 June 2017 13:38","dd MMMM yyyy HH:mm", $null)

2 个答案:

答案 0 :(得分:1)

您可以在格式字符串中使用a literal string或转义标识符:

$date = '26th June 2017 13:38'
$format = 'dd"th" MMMM yyyy HH:mm' # or \t\h
[datetime]::ParseExact($date, $format, $null)

作为旁注,我无法复制您的#2问题。

答案 1 :(得分:1)

您还可以使用TryParseExact,这需要花费更多的精力,但是花费很少。而且,尽管正如先前的海报所指出的那样,您可以 在其中放置文字,但是我认为对于不同的结束日期,您需要使用多种情况。这就是我想出的...请注意,格式字符串的开头只有一个'd'。 “ dd”仅适用于两位数的日期,即21日,而不是1日。

[System.Globalization.CultureInfo]$provider = [System.Globalization.CultureInfo]::InvariantCulture
[ref]$parsedDate = Get-Date

$dateStrings = @('1st March 2019 13:38', '2nd March 2019 12:34', '21st March 2019 13:01', '8th March 2019 16:20', '28th March 2019 16:20', '3rd March 2019 20:20', '23rd March 2019 23:59', '2019-03-08 13:14:40')

$rdFormat = 'd\r\d MMMM yyyy HH:mm'
$thFormat = 'd\t\h MMMM yyyy HH:mm'
$stFormat = 'd\s\t MMMM yyyy HH:mm'
$ndFormat = 'd\n\d MMMM yyyy HH:mm'

foreach ($d in $dateStrings)
{
    if ([DateTime]::TryParseExact($d, $stFormat, $provider, [System.Globalization.DateTimeStyles]::None, $parsedDate))
    {
        Write-Information -MessageData "[$d] found by [$stFormat]" -InformationAction Continue
    }
    elseif ([DateTime]::TryParseExact($d, $rdFormat, $provider, [System.Globalization.DateTimeStyles]::None, $parsedDate))
    {
        Write-Information -MessageData "[$d] found by [$rdFormat]" -InformationAction Continue
    }
    elseif ([DateTime]::TryParseExact($d, $thFormat, $provider, [System.Globalization.DateTimeStyles]::None, $parsedDate))
    {
        Write-Information -MessageData "[$d] found by [$thFormat]" -InformationAction Continue
    }
    elseif ([DateTime]::TryParseExact($d, $ndFormat, $provider, [System.Globalization.DateTimeStyles]::None, $parsedDate))
    {
        Write-Information -MessageData "[$d] found by [$ndFormat]" -InformationAction Continue
    }
    else
    {
        Write-Information -MessageData "[$d] not found by anything!" -InformationAction Continue
    }
    Write-Output $parsedDate

}