比较PowerShell中字符串的日期
我需要检查哪个日期更大比较PowerShell中字符串的日期,powershell,Powershell,我需要检查哪个日期更大 $Deldate = "19-06-2018" $Newdate = "04-06-2018" 这对我不起作用,而且看起来格式不是“System.DateTime”。我从外部CSV文件中获取日期值。如何找到解决方案?最初提出的… 我打算将您的日期格式从DD-MM-YYYY更改为MM-DD-YYYY: if ($Deldate -ge $NewDate) { write-host "NewDate is bigger" } else { write-ho
$Deldate = "19-06-2018"
$Newdate = "04-06-2018"
这对我不起作用,而且看起来格式不是“System.DateTime”。我从外部CSV文件中获取日期值。如何找到解决方案?最初提出的… 我打算将您的日期格式从
DD-MM-YYYY
更改为MM-DD-YYYY
:
if ($Deldate -ge $NewDate) {
write-host "NewDate is bigger"
}
else {
write-host "Deldate is bigger"
}
我正在根据您给出的日期创建两个日期对象。我在比较这两个物体;PowerShell知道如何计算日期
它适用于美式约会
经过多次讨论……
但是,对于非美式日期,请考虑调用DATETIME的构造函数:
$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'
}
或者,如所提议的
[datetime]::ParseExact()
方法;记录在案。最初提议…
我打算将您的日期格式从DD-MM-YYYY
更改为MM-DD-YYYY
:
if ($Deldate -ge $NewDate) {
write-host "NewDate is bigger"
}
else {
write-host "Deldate is bigger"
}
我正在根据您给出的日期创建两个日期对象。我在比较这两个物体;PowerShell知道如何计算日期
它适用于美式约会
经过多次讨论……
但是,对于非美式日期,请考虑调用DATETIME的构造函数:
$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'
}
或者,如所提议的
[datetime]::ParseExact()
方法;有据可查。PowerShell很适合日期;它只需要知道这是一个约会
$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]$Deldate=“19-06-2018”
,但如注释所述,它仅对美国日期格式有效。PowerShell适用于日期;它只需要知道这是一个约会
$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]$Deldate=“19-06-2018”
,但如注释所述,它仅对美国日期格式有效。您应该能够将您创建的字符串强制转换为“datetime”类型,如下所示:
$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"
}
这将返回正确的结果。您不能简单地使用Get-Date cmdlet,因为
-Date
必需参数还要求参数的类型为“DateTime”,因此您首先必须将字符串转换为DateTime类型。您应该能够将创建的字符串转换为“DateTime”类型,如下所示:
$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"
}
这将返回正确的结果。您不能简单地使用Get-Date cmdlet,因为
-Date
必需参数还要求参数的类型为“DateTime”,因此您首先必须将字符串强制转换为DateTime类型。ohhhhhhh--US PowerShell与EU样式的日期有着有趣的关系。我猜你是从池塘对面来的?运行代码I getget Date:无法绑定参数'Date'。无法将值“19-06-2018”转换为类型“System.DateTime”。错误:“字符串未被识别为有效的日期时间。”
@Adam:请注意,OP以问题中所示的特定格式(通过CSV文件)提供日期字符串,该格式是否适用于获取日期取决于当前区域性;如果en-US
(美国英语)生效,它将不起作用。简而言之:只有当输入字符串恰好按照当前区域性($PSCulture
)规则格式化时,这个答案才有效。@(如果我没记错(而且我已经老了,内存不是原来的样子),对datetime
的隐式转换调用类的底层Parse()方法,它支持一些日期/时间格式,但正如您所注意到的,不是dd-MM-yyyy。如果Parse()不知道格式,Microsoft建议使用ParseExact()方法。英雄联盟这不是令人困惑的想法,对吗?:-)奇怪的是,在这种情况下,显式转换(例如,[datetime]“19-06-2018”
)并不等同于获取日期“19-06-2018”
的隐式转换。对于显式强制转换,PowerShell始终使用不变的区域性,因此[datetime]“19-06-2018”
永远不起作用;这与文化敏感的[datetime]:Parse(“19-06-2018”)
形成对比,比如Get Date
调用。抄送@BryceMcDonald@Adam:隐式转换调用区域性敏感的.Parse()
重载,而PowerShell中的显式强制转换则明确调用接受区域性并通过设计传递不变区域性的.Parse()
重载,这在很大程度上类似于en-US
。PowerShell一贯使用这种技术,因此它也适用于将字符串强制转换为数字类型。我猜你是从池塘对面来的?运行代码I getget Date:无法绑定参数'Date'。无法将值“19-06-2018”转换为类型“System.DateTime”。错误:“字符串未被识别为有效的日期时间。”
@Adam:请注意,OP以问题中所示的特定格式(通过CSV文件)提供日期字符串,该格式是否适用于获取日期取决于当前区域性;如果en-US
(美国英语)生效,它将不起作用。简而言之:只有当输入字符串恰好按照当前区域性($PSCulture
)规则格式化时,这个答案才有效。@(如果我没记错(而且我已经老了,内存不是原来的样子),对datetime
的隐式转换调用类的底层Parse()方法,它支持一些日期/时间格式,但正如您所注意到的,不是dd-MM-yyyy。如果Parse()不知道格式,Microsoft建议使用ParseExact()方法。英雄联盟这不是令人困惑的想法,对吗?:-)奇怪的是,在这种情况下,显式转换(例如,[datetime]“19-06-2018”
)并不等同于获取日期“19-06-2018”
的隐式转换。对于显式强制转换,PowerShell始终使用不变的区域性,因此[datetime]“19-06-2018”
永远不起作用;这与[datetime]:Parse(“19-06”)形成对比