Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较PowerShell中字符串的日期_Powershell - Fatal编程技术网

比较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 get
get 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 get
get 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”)形成对比