rana-mp
Goto Top

Powershell - locale Problem bei get-date

Wie kann ich bei Uebergeben eines Datums als String an get-date angeben in welchem Format das Datum ist?

Hallo zusammen,

ich mache in der Powershell folgende Zuweisung:

$datum = get-date "10.06.2011"  

Grundsaetzlich funktioniert das gut, der String wird in ein Date-Time Objekt umgewandelt mit dem ich dann weiterarbeiten kann. Ich habe jetzt aber das Problem, das auf dem System auf dem das script laufen soll, auf englisch (US-EN) ist, also auch das englische Datumsformat in der Systemsteuerung definiert ist. Das kann ich nicht aendern.
Powershell interpretiert mir den String also als Datum im amerikanischem Format als mm.dd.yyyy.
Da die Strings die ich dem Script uebergebe das Datum aber im deutschen Format dd.mm.yyyy enthalten, bekomme ich im besten Fall eine Fehlermeldung (wenn ich zB 14.06.2011 uebergebe) oder falsche Werte wenn ich mit dem Datum arbeiten will, zB. wenn ich $datum.dayofyear aufrufe.

In der Powershell Dokumentation habe ich leider nicht gefunden wie ich bei einer solchen Zuweisung das Format angeben kann. Ich habe einige Sachen mit -uformat und -format getestet, aber leider funktioniert es nicht.


Gruss,

rana-mp

Content-ID: 168199

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

Ausgedruckt am: 24.11.2024 um 16:11 Uhr

Friemler
Friemler 17.06.2011 um 13:14:22 Uhr
Goto Top
Hallo rana-mp,

schau mal hier nach.

Gruß
Friemler
rana-mp
rana-mp 17.06.2011 um 13:44:57 Uhr
Goto Top
Hallo Friemler,

Leider hilft mir das nicht so richtig weiter. Die Datumsformatierungen scheinen wohl nur bei der Ausgabe eines Datums zu greifen. Das hilft dann leider nicht wenn schon bei der Eingabe das Datum flasch vom System interpretiert wird.

Wenn ich zB. dieses versuche:

get-date  "14.11.2011" -format "dd.MM.yyyy"  

bekomme ich eine Fehlermeldung:
Get-Date : Cannot bind parameter 'Date'. Cannot convert value "14.11.2011" to type "System.DateTime". Error: "String was not recognized as a valid DateTime."  

Bei einem Datum wie zB. dem 10.06.2011 bekomm ich keine Fehlermeldung, aber wenn ich das Datum dann ausgebe ist, wird 06.10.2011 draus:

PS C:\Users\XXX> get-date "10.06.2011"  -format "dd.MM.yyyy"   
06.10.2011

Das heist ja im Endeffekt das der -format Befehl sich scheinbar nur auf die Ausgabe bezieht, er den Input aber immer anhand der eingestellten locale interpretiert. Stelle ich diese auf DE um funktioniert es richtig. Leider kann ich das nicht machen, es laufen einige Anwendungen auf dem Server die auf die korrekte locale angewiesen sind.


Gruss,

rana-mp
Logan000
Logan000 17.06.2011 um 14:22:54 Uhr
Goto Top
Moin moin

Wie wäre es so:
$deDate = "10.06.2011"       
$usDate = $deDate.substring(3,2) + "." + $deDate.substring(0,2) + "." + $deDate.substring(6,4)  
Get-date $usDate

Gruß L.
Friemler
Friemler 17.06.2011 um 14:31:34 Uhr
Goto Top
Hallo rana-mp,

wenn Du genau weißt, dass es sich immer um Datumswerte im deutschen mm.tt.jjjj-Format handelt, bleibt dann wohl nichts anderes übrig, als die Datumswerte "zu Fuß" zu zerlegen und mit den Parametern -Month, -Day und -Year zuzuweisen:
$datum = get-date -month 6 -day 17 -year 2011

Gruß
Friemler


[EDIT]
Zu langsam.
[/EDIT]
rana-mp
rana-mp 17.06.2011 um 14:48:12 Uhr
Goto Top
OK, danke face-smile

Das macht mein script zwar nicht schoener, aber was solls, es muss funktionieren...


Gruss,

rana-mp