无法绑定 New-TimeSpan -Start。值不是日期时间
New-TimeSpan -Start cannot be bound. Value is no DateTime
我必须以秒为单位了解 DateTime 和 Sysdate 之间的差异。
此代码在几个月内运行良好。由于我将其放入函数中,因此出现错误:
New-TimeSpan : The parameter "Start" cannot be bound. The Value "06/14/2016 09:50:42" cannot get converted into "System.DateTime". Error : "String is no valid DateTime."
(因为控制台输出是德语,所以用自己的话翻译)
function _CalcRunningTime
{
param( [String] $p_sDatetime )
$sSYSDATE = Get-Date -format "dd.MM.yyyy HH:mm:ss"
$oCulture = New-Object System.Globalization.CultureInfo("de-DE")
$p_sDatetime = [DateTime]::ParseExact( $p_sDatetime, "dd.MM.yyyy HH:mm:ss", $oCulture )
$sSYSDATE = [DateTime]::ParseExact( $sSYSDATE, "dd.MM.yyyy HH:mm:ss", $oCulture )
$oTIMESPAN = New-TimeSpan –Start $p_sDatetime –End $sSYSDATE
$iSeconds = ($oTIMESPAN.Hours * 3600) + ($oTIMESPAN.Minutes * 60) + $oTIMESPAN.Seconds
Return $iSeconds
}
$p_sDatetime
的输入格式例如06.14.2016 09:50:42
。 ParseExact()
后格式如上所示。
不要重复使用变量或参数,也不要将 DateTime
值转换为字符串并将它们解析回 DateTime
值。此外,计算两个 DateTime
值之间的差异将为您提供一个 Timespan
对象(它已经为您提供了一个现成的方法来获取总秒数)。无需特意使用 cmdlet 或手动计算秒数。使用 return
关键字也是可选的。
将您的函数简化为如下所示:
function _CalcRunningTime {
param( [String] $p_sDatetime )
$culture = New-Object System.Globalization.CultureInfo('de-DE')
$parsedDate = [DateTime]::ParseExact($p_sDatetime, 'dd.MM.yyyy HH:mm:ss', $culture)
($parsedDate – (Get-Date)).TotalSeconds
}
如果您不需要秒的小数部分,请将秒数转换为整数:
[int]($parsedDate – (Get-Date)).TotalSeconds
至少现在这对我来说似乎工作得很好:
# ------------------ Func: _CalcRunningTime ------------------
function _CalcRunningTime
{
param( [String] $p_sDatetime )
$sSYSDATE = Get-Date -format "dd.MM.yyyy HH:mm:ss"
$oTIMESPAN = New-TimeSpan –Start $p_sDatetime –End $sSYSDATE
Return $oTIMESPAN.TotalSeconds
}
# ------------------ Func: _CalcRunningTime ------------------
我必须以秒为单位了解 DateTime 和 Sysdate 之间的差异。
此代码在几个月内运行良好。由于我将其放入函数中,因此出现错误:
New-TimeSpan : The parameter "Start" cannot be bound. The Value "06/14/2016 09:50:42" cannot get converted into "System.DateTime". Error : "String is no valid DateTime."
(因为控制台输出是德语,所以用自己的话翻译)
function _CalcRunningTime
{
param( [String] $p_sDatetime )
$sSYSDATE = Get-Date -format "dd.MM.yyyy HH:mm:ss"
$oCulture = New-Object System.Globalization.CultureInfo("de-DE")
$p_sDatetime = [DateTime]::ParseExact( $p_sDatetime, "dd.MM.yyyy HH:mm:ss", $oCulture )
$sSYSDATE = [DateTime]::ParseExact( $sSYSDATE, "dd.MM.yyyy HH:mm:ss", $oCulture )
$oTIMESPAN = New-TimeSpan –Start $p_sDatetime –End $sSYSDATE
$iSeconds = ($oTIMESPAN.Hours * 3600) + ($oTIMESPAN.Minutes * 60) + $oTIMESPAN.Seconds
Return $iSeconds
}
$p_sDatetime
的输入格式例如06.14.2016 09:50:42
。 ParseExact()
后格式如上所示。
不要重复使用变量或参数,也不要将 DateTime
值转换为字符串并将它们解析回 DateTime
值。此外,计算两个 DateTime
值之间的差异将为您提供一个 Timespan
对象(它已经为您提供了一个现成的方法来获取总秒数)。无需特意使用 cmdlet 或手动计算秒数。使用 return
关键字也是可选的。
将您的函数简化为如下所示:
function _CalcRunningTime {
param( [String] $p_sDatetime )
$culture = New-Object System.Globalization.CultureInfo('de-DE')
$parsedDate = [DateTime]::ParseExact($p_sDatetime, 'dd.MM.yyyy HH:mm:ss', $culture)
($parsedDate – (Get-Date)).TotalSeconds
}
如果您不需要秒的小数部分,请将秒数转换为整数:
[int]($parsedDate – (Get-Date)).TotalSeconds
至少现在这对我来说似乎工作得很好:
# ------------------ Func: _CalcRunningTime ------------------
function _CalcRunningTime
{
param( [String] $p_sDatetime )
$sSYSDATE = Get-Date -format "dd.MM.yyyy HH:mm:ss"
$oTIMESPAN = New-TimeSpan –Start $p_sDatetime –End $sSYSDATE
Return $oTIMESPAN.TotalSeconds
}
# ------------------ Func: _CalcRunningTime ------------------