如何比较 powershell v2.0 中的两个自定义日期
how to compare two custom dates in powershell v2.0
是否可以比较 2 个自定义日期。我正在尝试检查变量是否持有 date1 小于 date2,如果是,报告说 date1 是旧日期。
我从 a.来自日志文件的 date1 和来自应用程序本身的 date2
现在,date1 和 date2 都符合要求的格式,即
$Date1 = Tue,Aug 16, 2016 12:40:03
$Date2 = Mon,Aug 22, 2016 16:33:02
我的下一步是比较这两个日期并报告日期 1 是否比日期 2 更早,我不知道如何继续。非常感谢任何 help/ideas。
感谢 Pete 和 Ansgar Wiechers
更新工作代码:
$Date1DateTime = [DateTime]::ParseExact($Date1,'ddd,MMM d, yyyy, HH:mm:ss',[Globalization.CultureInfo]::InvariantCulture); $Date2DateTime = [DateTime]::ParseExact($Date2,'ddd,MMM d, yyyy, HH:mm:ss',[Globalization.CultureInfo]::InvariantCulture); $Date1DateTime -lt $Date2DateTime
如果字符串排序顺序与日期排序顺序相同,则只能比较日期字符串。例如,ISO 格式的日期字符串是可比较的:
2016-08-16T12:40:03
2016-08-22T16:33:02
自定义格式的日期字符串不是,因为 T
在 M
之后,但 8 月 16 日实际上应该在 8 月 22 日之前:
Tue,Aug 16, 2016 12:40:03
Mon,Aug 22, 2016 16:33:02
如果您没有 ISO 格式的日期字符串,通常最好将它们解析为实际的 DateTime
值(如 建议的那样),特别是如果您的参考值最初是 DateTime
无论如何。
$fmt = 'ddd,MMM d, yyyy, HH:mm:ss'
$culture = [Globalization.CultureInfo]::InvariantCulture
$Date1 = Get-Date $LogFileDate
$val = (b2b.exe -readparams $param | Select-Object -Skip 1 -First 1) -split '='
$Date2 = [DateTime]::ParseExact($val[1], $fmt, $culture)
if ($Date1 -lt $Date2) {
...
}
是否可以比较 2 个自定义日期。我正在尝试检查变量是否持有 date1 小于 date2,如果是,报告说 date1 是旧日期。
我从 a.来自日志文件的 date1 和来自应用程序本身的 date2
现在,date1 和 date2 都符合要求的格式,即
$Date1 = Tue,Aug 16, 2016 12:40:03
$Date2 = Mon,Aug 22, 2016 16:33:02
我的下一步是比较这两个日期并报告日期 1 是否比日期 2 更早,我不知道如何继续。非常感谢任何 help/ideas。
感谢 Pete 和 Ansgar Wiechers
更新工作代码:
$Date1DateTime = [DateTime]::ParseExact($Date1,'ddd,MMM d, yyyy, HH:mm:ss',[Globalization.CultureInfo]::InvariantCulture); $Date2DateTime = [DateTime]::ParseExact($Date2,'ddd,MMM d, yyyy, HH:mm:ss',[Globalization.CultureInfo]::InvariantCulture); $Date1DateTime -lt $Date2DateTime
如果字符串排序顺序与日期排序顺序相同,则只能比较日期字符串。例如,ISO 格式的日期字符串是可比较的:
2016-08-16T12:40:03 2016-08-22T16:33:02
自定义格式的日期字符串不是,因为 T
在 M
之后,但 8 月 16 日实际上应该在 8 月 22 日之前:
Tue,Aug 16, 2016 12:40:03 Mon,Aug 22, 2016 16:33:02
如果您没有 ISO 格式的日期字符串,通常最好将它们解析为实际的 DateTime
值(如 DateTime
无论如何。
$fmt = 'ddd,MMM d, yyyy, HH:mm:ss'
$culture = [Globalization.CultureInfo]::InvariantCulture
$Date1 = Get-Date $LogFileDate
$val = (b2b.exe -readparams $param | Select-Object -Skip 1 -First 1) -split '='
$Date2 = [DateTime]::ParseExact($val[1], $fmt, $culture)
if ($Date1 -lt $Date2) {
...
}