narthan
Goto Top

Powershell csv Convert-String Date Time

Hallo liebe Administratoren,

ich habe aktuell ein kleines Problem bei der Konvertierung eines Strings, bei dem ich leider selbst mit googlen nicht weiterkomme.
Ich habe eine große CSV mit mehreren hunderten von Spalten die ich über ein Script in eine kleinere CSV umwandel. In einer Spalte steht ein Datum mit Uhrzeit, aber in Form eines Strings, z.B. wie folgt:

Date and Time
"2020-10-15 03:15:58"  
"2020-10-15 03:09:21"  
"2020-09-26 03:33:31"  
"2020-10-15 03:59:01"  

Nun möchte ich diese Werte in der neuen CSV Datei im folgenden Format haben:
Date
"15.10.2020 00:00:00"  
"15.10.2020 00:00:00"  
"26.09.2020 00:00:00"  
"15.10.2020 00:00:00"  

Ich habe dafür aktuell diesen Code verwendet:
Import-Csv 'C:\Users\test\input.csv' | Select-Object -Property '#',@{label='Date';expression={$_.'Date and Time' | Convert-String -Example '2020-06-29 04:00:00=15.10.2020 00:00:00'}} | Export-Csv -Path 'C:\Users\test\Output.csv' -NoTypeInformation   

Leider erhalte ich in der konvertierten CSV Datei immer genau den String, den ich im Convert-String Beispiel angebe, also wie hier im Bsp. "15.10.2020 00:00:00", die Werte der input Datei werden scheinbar nicht berücksichtigt.
Habe ich ein Problem bei der Pipe, wenn ja wo? Kann mich bitte jemand auf meinen Fehler hinweisen?

Vielen dank und Grüße
narthan

Content-Key: 613123

Url: https://administrator.de/contentid/613123

Printed on: April 26, 2024 at 22:04 o'clock

Member: TK1987
Solution TK1987 Oct 15, 2020 updated at 11:11:38 (UTC)
Goto Top
Moin,

Zitat von @narthan:
Convert-String -Example '2020-06-29 04:00:00=15.10.2020 00:00:00'  
bei -Example müssen vor und hinter dem Gleichzeichen der selbe Inhalt stehen (nur halt wie gewünscht vertauscht), sonst kann er natürlich nicht verstehen, was du da eigentlich tun willst.
Darüber hinaus, muss dieser auch eindeutige Werte haben. Wenn du wie bei der Uhrzeit zwei mal "00" verwendest, sind diese u. U. im Ergebnis vertauscht.
Convert-String -Example '2020-06-29 01:02:03=29.06.2020 01:02:03'  

Imao ist es aber ohnehin einfacher, die Werte mit Regex-Replace um zu drehen.
Import-Csv 'C:\Users\test\input.csv' | Select-Object -Property '#',@{label='Date';expression={$_.'Date and Time' -replace '^(\d{4})-(\d{2})-(\d{2})','$3.$2.$1'}} | Export-Csv -Path 'C:\Users\test\Output.csv' -NoTypeInformation   

Gruß Thomas
Member: narthan
narthan Oct 15, 2020 updated at 11:31:28 (UTC)
Goto Top
Hi Thomas,

vielen Dank für diese nützlichen Infos, ich probiere es gleich mal aus! face-smile

Danke schonmal und Gruß,
narthan


EDIT:
...hat super funktioniert, vielen Dank nochmal @TK1987 face-smile
Mitglied: 146189
146189 Oct 16, 2020 updated at 08:24:22 (UTC)
Goto Top
Da das Datum hier schon in einem direkt parsbaren Format vorliegt geht auch ohne Regex
Import-csv 'C:\Users\test\input.csv' | select @{n='Date';e={(get-date $_.'Date and Time').Date.toString('dd.MM.yyyy HH:mm:ss')}} | export-csv 'C:\Users\test.output.csv' -NoType
Gruß w.