slauf82
Goto Top

Powershell: Datumteilstring mit 6 Stellen (mit Bindestrichen dazwischen 8 Stellen) gegen Datumteilstring mit 8 Stellen ersetzen

Hallo,

ich habe einen String, der beinhaltet ein Datum in der Form YYYY-MM.DD, allerdings ist bei Monat und Tag keine führende Null vorhanden, sodass der Teilstring von 6 bist 8 Stellen umfasst.
Wie kann ich diesen Teilstring einheitlich in einen 8 Zeichen Teilstring mit führenden Nullen bei Monat und Tag ersetzen in der Form YYYY-MM-DD oder noch besser YYYYMMDD ?

Content-ID: 368775

Url: https://administrator.de/forum/powershell-datumteilstring-mit-6-stellen-mit-bindestrichen-dazwischen-8-stellen-gegen-datumteilstring-mit-8-368775.html

Ausgedruckt am: 24.12.2024 um 02:12 Uhr

Pjordorf
Pjordorf 21.03.2018 um 11:16:45 Uhr
Goto Top
Hallo,

Zitat von @slauf82:
ich habe einen String,
Welches OS?

der beinhaltet ein Datum in der Form YYYY-MM.DD, allerdings ist bei Monat und Tag keine führende Null vorhanden, sodass der Teilstring von 6 bist 8 Stellen umfasst.
Wo genau kommt das Datum her?

Wie kann ich diesen Teilstring einheitlich in einen 8 Zeichen Teilstring mit führenden Nullen bei Monat und Tag ersetzen in der Form YYYY-MM-DD oder noch besser YYYYMMDD ?
Wenn dein uns unbekanntes OS und die Quelle deines Datums es nicht hergibt, wirst du selbst das Datum teilen müssen um dann zu schauen ob Monat und Tag ohne führende Null sind. Das kannst du per Länge machen oder per Wert z.B. Wenn Len(Monat) <= 9 dann Mon="0" + Mon oder halt Wenn Mon >= 9 dann Mon = "0" + Mon.

Gruß,
Peter
NetzwerkDude
Lösung NetzwerkDude 21.03.2018 um 11:29:43 Uhr
Goto Top
das get-date cmdlet ist da recht flexibel - so kannst du dem als input eine vielzahl an formaten geben, und eine eigne ausgabe definieren, z.b.
get-date -date 2017-10.2 -format yyyMMdd

(poste grad vom handy, kann den befehl nicht wirklich testen)
Pjordorf
Lösung Pjordorf 21.03.2018 aktualisiert um 12:06:51 Uhr
Goto Top
Hallo,

Zitat von @slauf82:
Wie kann ich diesen Teilstring einheitlich in einen 8 Zeichen Teilstring mit führenden Nullen bei Monat und Tag ersetzen in der Form YYYY-MM-DD oder noch besser YYYYMMDD ?
Warum nicht mal ein get-help get-date -examples eingetippelt und dir dann das "Beispiel 3" mal angeschaut?
get-date -uformat "%Y%m%d"  
Gruß,
Peter
erikro
Lösung erikro 21.03.2018 um 12:02:31 Uhr
Goto Top
PS P:\> get-date -date 2018-1-2 -format yyyyMMdd
20180102

hth
Kraemer
Kraemer 21.03.2018 aktualisiert um 12:16:31 Uhr
Goto Top
Zitat von @Pjordorf:

Hallo,

Zitat von @slauf82:
ich habe einen String,
Welches OS?
war mir gar nicht bewusst, dass die Powershell da Unterschiede macht...

der beinhaltet ein Datum in der Form YYYY-MM.DD, allerdings ist bei Monat und Tag keine führende Null vorhanden, sodass der Teilstring von 6 bist 8 Stellen umfasst.
Wo genau kommt das Datum her?
und wenn er es sich ausgedacht hat ... was spielt das für eine Rolle?

Wie kann ich diesen Teilstring einheitlich in einen 8 Zeichen Teilstring mit führenden Nullen bei Monat und Tag ersetzen in der Form YYYY-MM-DD oder noch besser YYYYMMDD ?
Wenn dein uns unbekanntes OS und die Quelle deines Datums es nicht hergibt, wirst du selbst das Datum teilen müssen um dann zu schauen ob Monat und Tag ohne führende Null sind. Das kannst du per Länge machen oder per Wert z.B. Wenn Len(Monat) <= 9 dann Mon="0" + Mon oder halt Wenn Mon >= 9 dann Mon = "0" + Mon.
muss er nicht, wie du vielleicht selbst schon festgestellt hast. Die Lösung von @NetzwerkDude und @erikro ist schon richtig. Darüber hinaus, wäre ein Regex wesentlich eleganter, wie ein Fehleranfälliger Versuch über Längen etc.

PS: Len gibt es nicht in der Powershell. Sage nur .length
slauf82
slauf82 22.03.2018 um 11:02:31 Uhr
Goto Top
Hatte auch eine Lösung gefunden:
$date = "2018-3-22".split("-");
und dann date[1] und date[2] untersucht ob kleiner 10 und falls ja dann $date[1] = "0" + $date[1];
so hätte es auch funktioniert
für die ausgabe dann anschließend die einzelteile neu verbinden aber ohne "-" als zeichen dazwischen.

eure lösungen sind aber wesentlich eleganter und mit viel weniger code zu lösen, deswegen habe ich eure lösung übernommen.

vielen dank für die hilfe face-smile