我必须在几秒钟内得到DateTime和Sysdate之间的区别。
这段代码运作良好数月。因为我把它放到一个函数中,我得到错误:
New-TimeSpan:参数"开始"无法约束。 The Value" 06/14/2016 09:50:42"无法转换为" System.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()
之后,格式如上所示。
答案 0 :(得分:2)
不要重复使用变量或参数,也不要将DateTime
值转换为字符串并将其解析回DateTime
值。此外,计算两个DateTime
值之间的差异将为您提供一个Timespan
对象(它已经为您提供了一个现成的方法来获取总秒数)。无需离开并使用cmdlet或手动计算秒数。使用return
关键字也是可选的。
将oyur函数简化为:
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
答案 1 :(得分:0)
至少目前看来这对我来说还不错:
# ------------------ 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 ------------------