我正在查询一个数据源的日期。根据我要搜索的项目,它可能会有多个与之相关联的日期。
get-date ($Output | Select-Object -ExpandProperty "Date")
输出的示例如下:
Monday, April 08, 2013 12:00:00 AM
Friday, April 08, 2011 12:00:00 AM
我想比较这些日期并返回设置在未来更远的日期。
我正在查询一个数据源的日期。根据我要搜索的项目,它可能会有多个与之相关联的日期。
get-date ($Output | Select-Object -ExpandProperty "Date")
输出的示例如下:
Monday, April 08, 2013 12:00:00 AM
Friday, April 08, 2011 12:00:00 AM
我想比较这些日期并返回设置在未来更远的日期。
由于Get-Date
返回的是一个DateTime对象,因此您可以直接比较它们。例如:
(get-date 2010-01-02) -lt (get-date 2010-01-01)
会返回false。
除了仅检查“-lt”之外,我想展示它可以有多么强大。
例如:我用它来计算从Windows事件查看应用程序日志中获取的时间差:
获取两个日期时间之间的差异:
PS> $Obj = ((get-date "10/22/2020 12:51:1") - (get-date "10/22/2020 12:20:1 "))
对象已创建:
PS> $Obj
Days : 0
Hours : 0
Minutes : 31
Seconds : 0
Milliseconds : 0
Ticks : 18600000000
TotalDays : 0.0215277777777778
TotalHours : 0.516666666666667
TotalMinutes : 31
TotalSeconds : 1860
TotalMilliseconds : 1860000
直接访问一个项目:
PS> $Obj.Minutes
31
虽然晚了一些,但以下是从$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
\r?\n
语法是什么?特别是 ?
符号。 - Blaisem考虑到您想要包括时间,我已经提供了样例。我将日期时间放在ISO8601中,这样可以以与语言环境无关的方式工作。
2013年4月8日星期一上午12:00:00 2011年4月8日星期五上午12:00:00
(Get-date "2013-04-08T00:00:00") -lt (Get-Date "2011-04-08T00:00:00")
$filterStartDate = (Get-Date "2020-01-06T00:00:00")
- Venkataraman R