如何在 PowerShell 中将字符串值转换为类型 "System.Int32"
How to convert a string value to type "System.Int32" in PowerShell
我试图计算两个日期之间的天数,但出现以下错误
如有任何建议,我们将不胜感激
$Days = $expiration - $currentDate
Cannot convert value "12/28/2020" to type "System.Int32". Error: "Input string was not in a correct format."
At line:1 char:1
+ $Days = $expiration - $currentDate
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvalidCastFromStringToInteger
下面是一段代码供参考
$expiration = $QueryResults.Results.ExpiryDate_s
$expiration
12/28/2020
$currentDate = Get-Date -Format 'MM/dd/yyyy'
$currentDate
09/30/2020
$expiration.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
$currentDate.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
您正在尝试对不正确的日期时间数据类型值进行数学计算。
我相信您可以使用 New-TimeSpan
cmdlet 来满足您的需求。像这样:
PS C:\WINDOWS\system32> New-TimeSpan -Start '01.01.2020' -End $(Get-Date)
Days : 274
Hours : 3
Minutes : 38
Seconds : 17
Milliseconds : 295
Ticks : 236866972950824
TotalDays : 274,151589063454
TotalHours : 6579,63813752289
TotalMinutes : 394778,288251373
TotalSeconds : 23686697,2950824
TotalMilliseconds : 23686697295,0824
您还可以调用日期时间数据类型变量的方法,例如AddDays()
。像这样:
PS C:\WINDOWS\system32> $CurrentDate = Get-Date
PS C:\WINDOWS\system32> $CurrentDate.AddDays(-274)
1 января 2020 г. 3:40:59
PowerShell直接支持减[datetime]
(System.DateTime
) instances, the result of which is reported as a span of time, expressed as a [timespan]
(System.TimeSpan
)实例。
为此,两个 传递给 -
(减法)运算符的操作数必须是 [datetime]
[= 类型61=],在你的情况下,你可以简单地通过 casting[1] 将你的字符串操作数转换为该类型(而不是调用 Get-Date -Format 'MM/dd/yyyy'
您应该直接调用 (Get-Date).Date
以便 return 一个 [datetime]
实例):
PS> [datetime] '12/28/2020' - [datetime] '09/30/2020'
Days : 89
Hours : 0
Minutes : 0
Seconds : 0
Milliseconds : 0
Ticks : 76896000000000
TotalDays : 89
TotalHours : 2136
TotalMinutes : 128160
TotalSeconds : 7689600
TotalMilliseconds : 7689600000
要仅获取两个日期之间的天数,使用当前日期(没有 time-of-day 组件)作为 RHS:
$days = ([datetime] '12/28/2020' - (Get-Date).Date).Days
至于你试过的:
如果将 string 类型的 LHS 传递给 -
运算符,PowerShell 会尝试将其解释为 数字.
由于'12/28/2020'
等字符串无法解析为数值类型,所以操作失败。举个更明显的例子:
PS> 'I am not a number' - 1
Cannot convert value "I am not a number" to type "System.Int32"
...
[int]
(System.Int32
) 恰好是为错误消息选择的一种数字类型。
[1] 请注意,PowerShell 转换始终基于 不变文化 ,它基于美国英语文化,无论当前是什么文化有效。这意味着 [datetime]
转换接受 [datetime]::Parse($string, $null)
接受的任何字符串,其中包括 month-first 日期字符串,例如 '1/13/2020'
以及更明确的格式,例如 '2020-1-13'
我试图计算两个日期之间的天数,但出现以下错误
如有任何建议,我们将不胜感激
$Days = $expiration - $currentDate
Cannot convert value "12/28/2020" to type "System.Int32". Error: "Input string was not in a correct format."
At line:1 char:1
+ $Days = $expiration - $currentDate
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvalidCastFromStringToInteger
下面是一段代码供参考
$expiration = $QueryResults.Results.ExpiryDate_s
$expiration
12/28/2020
$currentDate = Get-Date -Format 'MM/dd/yyyy'
$currentDate
09/30/2020
$expiration.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
$currentDate.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
您正在尝试对不正确的日期时间数据类型值进行数学计算。
我相信您可以使用 New-TimeSpan
cmdlet 来满足您的需求。像这样:
PS C:\WINDOWS\system32> New-TimeSpan -Start '01.01.2020' -End $(Get-Date)
Days : 274
Hours : 3
Minutes : 38
Seconds : 17
Milliseconds : 295
Ticks : 236866972950824
TotalDays : 274,151589063454
TotalHours : 6579,63813752289
TotalMinutes : 394778,288251373
TotalSeconds : 23686697,2950824
TotalMilliseconds : 23686697295,0824
您还可以调用日期时间数据类型变量的方法,例如AddDays()
。像这样:
PS C:\WINDOWS\system32> $CurrentDate = Get-Date
PS C:\WINDOWS\system32> $CurrentDate.AddDays(-274)
1 января 2020 г. 3:40:59
PowerShell直接支持减[datetime]
(System.DateTime
) instances, the result of which is reported as a span of time, expressed as a [timespan]
(System.TimeSpan
)实例。
为此,两个 传递给 -
(减法)运算符的操作数必须是 [datetime]
[= 类型61=],在你的情况下,你可以简单地通过 casting[1] 将你的字符串操作数转换为该类型(而不是调用 Get-Date -Format 'MM/dd/yyyy'
您应该直接调用 (Get-Date).Date
以便 return 一个 [datetime]
实例):
PS> [datetime] '12/28/2020' - [datetime] '09/30/2020'
Days : 89
Hours : 0
Minutes : 0
Seconds : 0
Milliseconds : 0
Ticks : 76896000000000
TotalDays : 89
TotalHours : 2136
TotalMinutes : 128160
TotalSeconds : 7689600
TotalMilliseconds : 7689600000
要仅获取两个日期之间的天数,使用当前日期(没有 time-of-day 组件)作为 RHS:
$days = ([datetime] '12/28/2020' - (Get-Date).Date).Days
至于你试过的:
如果将 string 类型的 LHS 传递给 -
运算符,PowerShell 会尝试将其解释为 数字.
由于'12/28/2020'
等字符串无法解析为数值类型,所以操作失败。举个更明显的例子:
PS> 'I am not a number' - 1
Cannot convert value "I am not a number" to type "System.Int32"
...
[int]
(System.Int32
) 恰好是为错误消息选择的一种数字类型。
[1] 请注意,PowerShell 转换始终基于 不变文化 ,它基于美国英语文化,无论当前是什么文化有效。这意味着 [datetime]
转换接受 [datetime]::Parse($string, $null)
接受的任何字符串,其中包括 month-first 日期字符串,例如 '1/13/2020'
以及更明确的格式,例如 '2020-1-13'