PowerShell: сравнение дат - PullRequest
       5

PowerShell: сравнение дат

24 голосов
/ 24 февраля 2011

Я запрашиваю источник данных для дат. В зависимости от предмета, который я ищу, с ним может быть связано больше даты.

get-date ($Output | Select-Object -ExpandProperty "Date")

Пример вывода выглядит так:

Monday, April 08, 2013 12:00:00 AM
Friday, April 08, 2011 12:00:00 AM

Я хотел бы сравнить эти даты и указать, какие из них будут установлены в будущем.

Ответы [ 2 ]

73 голосов
/ 24 февраля 2011

Поскольку Get-Date возвращает объект DateTime, вы можете сравнивать их напрямую. Пример:

(get-date 2010-01-02) -lt (get-date 2010-01-01)

вернет false.

1 голос
/ 11 мая 2019

Поздний, но более полный ответ в плане получения самой продвинутой даты от $Output

## Q:\test\2011\02\SO_5097125.ps1
## simulate object input with a here string 
$Output = @"
"Date"
"Monday, April 08, 2013 12:00:00 AM"
"Friday, April 08, 2011 12:00:00 AM"
"@ -split '\r?\n' | ConvertFrom-Csv

## use Get-Date and calculated property in a pipeline
$Output | Select-Object @{n='Date';e={Get-Date $_.Date}} |
    Sort-Object Date | Select-Object -Last 1 -Expand Date

## use Get-Date in a ForEach-Object
$Output.Date | ForEach-Object{Get-Date $_} |
    Sort-Object | Select-Object -Last 1

## use [datetime]::ParseExact
## the following will only work if your locale is English for day, month day abbrev.
$Output.Date | ForEach-Object{
    [datetime]::ParseExact($_,'dddd, MMMM dd, yyyy hh:mm:ss tt',$Null)
} | Sort-Object | Select-Object -Last 1

## for non English locales
$Output.Date | ForEach-Object{
    [datetime]::ParseExact($_,'dddd, MMMM dd, yyyy hh:mm:ss tt',[cultureinfo]::InvariantCulture)
} | Sort-Object | Select-Object -Last 1

## in case the day month abbreviations are in other languages, here German
## simulate object input with a here string 
$Output = @"
"Date"
"Montag, April 08, 2013 00:00:00"
"Freidag, April 08, 2011 00:00:00"
"@ -split '\r?\n' | ConvertFrom-Csv
$CIDE = New-Object System.Globalization.CultureInfo("de-DE")
$Output.Date | ForEach-Object{
    [datetime]::ParseExact($_,'dddd, MMMM dd, yyyy HH:mm:ss',$CIDE)
} | Sort-Object | Select-Object -Last 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...