2016-06-14 23 views
0

DateTimeとSysdateの差を秒単位で取得する必要があります。New-TimeSpan -Startはバインドできません。値はありませんDateTime

このコードは数か月間うまく機能しました。

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."

(コンソール出力がドイツであるため、自身の言葉に翻訳された)$p_sDatetime

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 
} 

入力形式は、例えば次のとおりです。私は、関数に入れているので、私はエラーを取得しています06.14.2016 09:50:42ParseExact()の後に、フォーマットは上記のようになります。

答えて

2

変数またはパラメータを再使用しないでください。DateTimeの値を文字列に変換してから、DateTimeの値に戻して解析しないでください。また、2つのDateTimeの値の差を計算すると、Timespanオブジェクト(合計秒数を取得するための既製のメソッドを既に提供しています)が得られます。途中でコマンドレットを使用するか、手動で秒数を計算する必要はありません。 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 
+0

Function TotalSecondsは私にはハイライトではありません。私はエラーが発生している:私の関数の戻り値は、System.Int32に変換することはできません。 – Yaerox

+1

@Mike再生できません。 'TotalSeconds'プロパティは整数に変換可能なdoubleを返します。 –

+0

Sry、私はもはやそれを再現することはできません...私のために、これは今でも動作します...私はどこか別の問題を抱えていたと思います。ありがとうございます。 – Yaerox

0

を私のためにうまくいくようです。

関連する問題