Я выбрал бы ParseExact()
с некоторым регулярным выражением, чтобы удалить все th, rd, st. Чем вы просто должны использовать правильный формат в ToString()
EDIT обновление кода, основанного на @JosefZ предложение.
foreach ($date in @(
'July 27th, 2016'
'December 3rd, 2014'
'August 1st, 1998'
'March 2nd, 1979'
)) {
$clean = $date -replace '(st|nd|rd|th),'
$dateObject = [datetime]::ParseExact($clean, 'MMMM d yyyy', [System.Globalization.CultureInfo]::InvariantCulture)
# Apparently, this works too ...
$dateObject = [datetime]$clean
$dateObject.ToString('yyyy-MM-dd')
}
'$ dateObject = [datetime] $ clean' должно быть достаточно. Для моей локали 'ParseExact' вызывает _Exception, вызывающий« ParseExact »с аргументом« 3 »:« String не был признан допустимым DateTime. »_. Замените третий аргумент '$ null' на' [System.Globalization.CultureInfo] :: InvariantCulture'. – JosefZ