比较PowerShell中字符串的日期

时间:2018-06-04 13:56:21

标签: powershell

$Deldate = "19-06-2018"
$Newdate = "04-06-2018"

我需要检查哪个日期更大。

if ($Deldate -ge $NewDate) {
    write-host "NewDate is bigger"
} 
else {
    write-host "Deldate is bigger"
}

这对我不起作用,看起来格式不是" System.DateTime"。我从外部CSV文件中获取日期值。我如何找到解决方案?

3 个答案:

答案 0 :(得分:3)

您应该能够将您创建的字符串转换为“datetime”类型,如下所示:

$Deldate = "19-06-2018"
$Newdate = "04-06-2018"

$Deldate = [datetime]::ParseExact("$Deldate", 'dd-MM-yyyy', $null)
$Newdate = [datetime]::ParseExact("$Newdate", 'dd-MM-yyyy', $null)

if ($Deldate -ge $NewDate) {
    write-output "NewDate is bigger than or equal to"
}
else {
    write-output "Deldate is bigger"
}

返回正确的结果。您不能简单地使用Get-Date cmdlet,因为-Date required参数还要求参数的类型为“DateTime”,因此您首先必须将字符串强制转换为DateTime类型。

答案 1 :(得分:1)

最初建议......

我要将日期格式从DD-MM-YYYY更改为MM-DD-YYYY

$Deldate = Get-Date "06-19-2018"
$Newdate = Get-Date "06-04-2018"
if ($Deldate -gt $Newdate) { 
    'Deldate is larger'
} 
else {
    'Newdate is larger or equal'
}

我根据您提供的相应日期创建两个日期对象。我比较了这两个对象; PowerShell知道如何进行日期数学运算。

适用于美式日期。

经过多次讨论......

但是,对于非美国式日期,请考虑调用datetime的构造函数:

$Deldate = New-object 'datetime' -ArgumentList 2018, 6, 19, $null, $null, $null
$Newdate = New-object 'datetime' -ArgumentList 2018, 6, 4, $null, $null, $null
if ($Deldate -gt $Newdate) { 'Deldate is larger' } else { 'Newdate is larger or equal' }

或者,正如所提出的[datetime]::ParseExact()方法;记录here

答案 2 :(得分:0)

PowerShell适用于日期;它只需要知道它是一个约会......

$Deldate = get-date "19-06-2018"
$Newdate = get-date "04-06-2018"

if ($Deldate -ge $NewDate) {
    write-host "NewDate is bigger"
}
else {
    write-host "Deldate is bigger"
}

注意:您可以投射[datetime]$Deldate ="19-06-2018",但正如 PowerTip: Convert String into DateTime Object 的评论中所述,它仅对美国日期格式有效。