【发布时间】:2023-01-25 01:15:39
【问题描述】:
我正在尝试确定 1 个设定日期何时大于或等于随机日期。
$2WeeksFuture = $null
# Calculate desired date 2 weeks from today
$2WeeksFuture = (Get-Date).AddDays(14)
# Convert to DateTime and apply formatting
$2WeeksFuture = (Get-Date -Date $2WeeksFuture -Format ("MM-dd-yy"))
$TimeMath | ForEach-Object {
foreach ($User in $GSuspend ) {
If ((Get-Date -Date $2WeeksFuture -Format ("MM-dd-yy")) -ge (get-date -date ($User.creationTime) -Format ("MM-dd-yy"))) {
Write-Host "$(Get-Date -Date $2WeeksFuture -Format ("MM-dd-yy")) -ge $(get-date -date ($User.creationTime) -Format ("MM-dd-yy"))"
}
}
}
错误的结果
02-07-23 -ge 01-08-20
02-07-23 -ge 01-30-19
02-07-23 -ge 01-30-19
02-07-23 -ge 01-30-19
02-07-23 -ge 01-30-19
02-07-23 -ge 01-30-19
02-07-23 -ge 01-30-19
我尝试了很多组合,但都不起作用。
【问题讨论】:
-
比较日期只能正确地完成,如果你别获取涉及的字符串,或者当你这样做时,首先将它们解析为
[DateTime]s (不是另一种方式)。$TimeMath里有什么?$GSuspend里有什么?$user.creationTime的类型是什么? -
我将重新格式化我的问题。很好的观察。但即使是 $2WeeksFuture 也会以字符串的形式出现。 @JeroenMostert
-
在您想要显示它或从文件或字符串中读取它之前,不要担心日期格式。
Get-Date返回一个 DateTime 对象,该对象可以直接与另一个 DateTime 对象进行比较,而无需考虑文化/格式。此外,DateTime 对象具有可用于确定两个 DateTime 之间的时间量或计算与另一个 DateTime 相隔指定间隔的 DateTime 的方法。 -
-Format参数使Get-Date输出字符串而不是[DateTime]对象。从两个调用中删除-Format ("MM-dd-yy"),它就会工作 -
不,
$2WeeksFuture是[DateTime](至少最初)。当显示它时,它被格式化为一个字符串,但你可以验证它不是(Get-Date).AddDays(14).GetType()。这是您要与之比较的其他内容,应该进行转换(通过[DateTime]::ParseExact(),例如:[DateTime]::ParseExact('02-27-23', 'MM-dd-yy', [CultureInfo]::InvariantCulture))。
标签: powershell