Datum aus Text prüfen und formatieren
Hallo zusammen,
ich bin gerade an einem Problem mit zu verarbeitenden Datumfelder, bei denen ich ein Denkanstoss brauche.
Aus durchzugehenden Text-Dateien muss ich ein Datum übernehmen und in das benötigte Format umbauen. Jetzt habe ich realisiert, das es vorkommen kann, dass dieses Feld auch mal nicht belegt ist.
Gegeben ist ein mögliches Datum: '2019-12-19T07:55:38+01:00', daraus soll aus "yyyy-MM-ddTHH:mm:ssZ" dann "yyyy-MM-dd hh:mm:ss" werden.
Get-Date -Format fällt aus da dieses Feld ja auch mal leer sein kann, denn dann wird ein "Cannot convert value" Fehler ausgelöst.
Wie macht Ihr das? Denke ich zu kompliziert das ich den Dreh nicht finde?
Viele Grüsse,
DniBo
ich bin gerade an einem Problem mit zu verarbeitenden Datumfelder, bei denen ich ein Denkanstoss brauche.
Aus durchzugehenden Text-Dateien muss ich ein Datum übernehmen und in das benötigte Format umbauen. Jetzt habe ich realisiert, das es vorkommen kann, dass dieses Feld auch mal nicht belegt ist.
Gegeben ist ein mögliches Datum: '2019-12-19T07:55:38+01:00', daraus soll aus "yyyy-MM-ddTHH:mm:ssZ" dann "yyyy-MM-dd hh:mm:ss" werden.
Get-Date -Format fällt aus da dieses Feld ja auch mal leer sein kann, denn dann wird ein "Cannot convert value" Fehler ausgelöst.
Wie macht Ihr das? Denke ich zu kompliziert das ich den Dreh nicht finde?
Viele Grüsse,
DniBo
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 82484181619
Url: https://administrator.de/contentid/82484181619
Ausgedruckt am: 17.11.2024 um 23:11 Uhr
4 Kommentare
Neuester Kommentar
Moin,
ist doch kein Problem. Gibt viele Wege. Z.B. mit try {}...catch{}
Leer oder sowas wie 20xxxx19 würde dann die Variable einfach nicht füllen und weiter gehts. Formatieren kann man es einfach als String..
PS: Habe es nochmal korrigiert. Wenn man Vairable explizit als datetime deklariert [datetime], dann wird bei der Exception erneuter Fehler geworfen, da man die nicht mit NULL anlegen kann.
Oben nur als Schnellschuss würde es bei Fehler NULL sein und das kann man wiederum mit IF z.B. abfangen.
Mit try...catch kann man auch mehrere Zeilen und ganze Codeabschnitte behandeln! Ist nur ein schnelles Bsp.
ist doch kein Problem. Gibt viele Wege. Z.B. mit try {}...catch{}
$datum = try {Get-Date '2019-12-19T07:55:38+01:00'} catch {}
Leer oder sowas wie 20xxxx19 würde dann die Variable einfach nicht füllen und weiter gehts. Formatieren kann man es einfach als String..
$datum = try {Get-Date '2019-12-19T07:55:38+01:00'} catch {}
if ($datum -ne $null) {$DateStr = '{0:yyyyMMdd}' -f $datum}
$DateStr
PS: Habe es nochmal korrigiert. Wenn man Vairable explizit als datetime deklariert [datetime], dann wird bei der Exception erneuter Fehler geworfen, da man die nicht mit NULL anlegen kann.
Oben nur als Schnellschuss würde es bei Fehler NULL sein und das kann man wiederum mit IF z.B. abfangen.
Mit try...catch kann man auch mehrere Zeilen und ganze Codeabschnitte behandeln! Ist nur ein schnelles Bsp.
Aloha!
DateTime hat passende "TryParse" Methoden dafür die True oder False bei leerem String oder nicht parsebarem Datum statt einer Exception liefern, dann benötigt man auch kein TryCatch
https://learn.microsoft.com/de-de/dotnet/api/system.datetime.tryparse?vi ...
Es gibt auch noch TryParseExact, bei der man ein exaktes Format spezifizieren kann welches das Datum im Ausgangszustand haben muss damit True zurückgegeben wird.
Pj
DateTime hat passende "TryParse" Methoden dafür die True oder False bei leerem String oder nicht parsebarem Datum statt einer Exception liefern, dann benötigt man auch kein TryCatch
$string = '2019-12-19T07:55:38+01:00'
$d = [datetime]::minvalue
if([datetime]::TryParse($string,[ref]$d)){
$dstring = $d.ToString("yyyy-MM-dd HH:mm:ss")
$dstring
}else{
"Unable to parse date string."
}
Es gibt auch noch TryParseExact, bei der man ein exaktes Format spezifizieren kann welches das Datum im Ausgangszustand haben muss damit True zurückgegeben wird.
Pj