Ответ от @jisaak является почти пятно на, за исключением того, что дополнительное заполнение пространства в передней части компонента даты («Вт августа 17:05:41 2015») будет вызывать только ошибка при попытке разобрать дату между 10-й и 31-го числа месяца:
PS C:\> [Datetime]::ParseExact('Tue Aug 4 17:05:41 2015', 'ddd MMM d HH:mm:ss yyyy', $us)
Tuesday, August 04, 2015 5:05:41 PM
PS C:\> [Datetime]::ParseExact('Tue Aug 11 17:05:41 2015', 'ddd MMM d HH:mm:ss yyyy', $us)
Exception calling "ParseExact" with "3" argument(s): "String was not recognized as a valid DateTime."
At line:1 char:1
+ [Datetime]::ParseExact('Tue Aug 11 17:05:41 2015', 'ddd MMM d HH:mm:ss yyyy', $ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : FormatException
Самый простой способ идти об этом, чтобы удалить заполнени пространство как входной строки и строки формата:
function Parse-CustomDate {
param(
[Parameter(Mandatory=$true)]
[string]$DateString,
[string]$DateFormat = 'ddd MMM d HH:mm:ss yyyy',
[cultureinfo]$Culture = $(New-Object System.Globalization.CultureInfo -ArgumentList "en-US")
)
# replace double space by a single one
$DateString = $DateString -replace '\s+',' '
[Datetime]::ParseExact($DateString, $DateFormat, $Culture)
}
Для сравнения вы должны лучше сравнивать сами объекты DateTime, а не их представления 'toString()'. – Vesper
Спасибо за ваш комментарий. Если возможно, предоставьте мне некоторые сведения об этом. – Ironic
Просто вы создаете объект 'DateTime' из подстроки через' get-date -format 'dd \/MM \/yyyy '', создаете другой объект на основе текущей даты, затем сравните как целые числа. 'if ($ onedate -lt $ twodate) {...}' – Vesper