我尝试了几次,但从未成功。我尝试将字符串作为日期时间读取,以便在第二步中将其转换为另一种输出格式...
[datetime]::ParseExact("26th June 2017 13:38","ddth MMMM yyyy HH:mm", $null)
可以用通用的东西代替th
格式的东西,所以我可以避免出现包含th, st
的情况?
我也尝试了不使用th
的情况,但它没有任何解决方案或其他方法,但没有用吗?
[datetime]::ParseExact("26 June 2017 13:38","dd MMMM yyyy HH:mm", $null)
答案 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
}