2016-08-22 2 views
1

Ist es möglich, 2 benutzerdefinierte Daten zu vergleichen. Ich versuche zu überprüfen, ob Variablen halten Datum1 ist weniger als Datum2, wenn ja, Bericht mit Datum1 ist älteres Datum.Wie zwei benutzerdefinierte Daten in Powershell v2.0 zu vergleichen

Ich bekomme beide Daten von a. date1 aus Protokolldatei und date2 aus der Anwendung selbst

, jetzt beide date1 und date2 sind in gewünschtem Format dh

$Date1 = Tue,Aug 16, 2016 12:40:03 
$Date2 = Mon,Aug 22, 2016 16:33:02 

mein nächster Schritt ist es, diese zwei Tage, vergleichen und melden, wenn date1 älteres Datum zu Date2 vergleichen ist , von dem ich nicht weiß, wie man weitermacht. Irgendwelche Hilfe/Ideen wird sehr geschätzt.

Dank Pete und Ansgar Wiechers

aktualisiert Arbeits Code:

$Date1DateTime = [DateTime]::ParseExact($Date1,'ddd,MMM d, yyyy, HH:mm:ss',[Globalization.CultureInfo]::InvariantCulture); $Date2DateTime = [DateTime]::ParseExact($Date2,'ddd,MMM d, yyyy, HH:mm:ss',[Globalization.CultureInfo]::InvariantCulture); $Date1DateTime -lt $Date2DateTime 
+1

'$ Date1DateTime = [Datetime] :: ParseExact ($ Date1, 'ddd, MMM d, yyyy, HH: mm: ss', [Culture] :: InvariantCulture); $ Date2DateTime = [DateTime] :: ParseExact ($ Datum2, 'DDD, MMM d, JJJJ, HH: mm: ss', [KulturInfo] :: InvariantCulture); $ Date1DateTime -lt $ Date2DateTime' – PetSerAl

+0

Danke PetSerAI – HULK

Antwort

2

Sie können nur Datumszeichenfolgen vergleichen, wenn die Zeichenfolge Sortierreihenfolge die gleiche wie das Datum Sortierreihenfolge ist. Zum Beispiel Datumsstrings im ISO-Format sind vergleichbar:

2016-08-16T12:40:03 
2016-08-22T16:33:02

Datum Strings in Ihrem benutzerdefinierten Format nicht, weil T nach M kommt, aber 16. August vor August tatsächlich kommen sollte 22:

Tue,Aug 16, 2016 12:40:03 
Mon,Aug 22, 2016 16:33:02

Wenn Sie die Datumszeichenketten nicht im ISO-Format haben, ist es normalerweise besser, sie in tatsächliche DateTime Werte zu analysieren (wie @PetSerAl vorgeschlagen), besonders wenn Ihr Referenzwert ursprünglich immer ein DateTime ist.

$fmt  = 'ddd,MMM d, yyyy, HH:mm:ss' 
$culture = [Globalization.CultureInfo]::InvariantCulture 

$Date1 = Get-Date $LogFileDate 
$val = (b2b.exe -readparams $param | Select-Object -Skip 1 -First 1) -split '=' 
$Date2 = [DateTime]::ParseExact($val[1], $fmt, $culture) 

if ($Date1 -lt $Date2) { 
    ... 
} 
+1

Sie müssen wahrscheinlich '[CultureInfo]' beheben, da es in PowerShell v2 kein gültiger Typbeschleuniger ist. – PetSerAl

+0

Danke PetSerAI. Ich habe [Globalization.CultureInfo] :: InvariantCulture wie von Ansgar erwähnt verwendet. Es funktionierte. – HULK