PowerShell: Warum erwartet CreationTime das US-Datumsformat, während das System das europäische Datumsformat hat?

PowerShell: Warum erwartet CreationTime das US-Datumsformat, während das System das europäische Datumsformat hat?

Ich habe meine alten VHS-Kassetten digitalisiert und es sind nun ziemlich viele einzelne Dateien. Ich möchte die Dateidaten auf die „ursprünglichen“ Daten der Ereignisse setzen, damit ich sie chronologisch sortieren kann.

CreationTimeDies kann mit PowerShell mithilfe von und erfolgen LastWriteTime, aber es gibt etwas, das ich nicht verstehe. Mein Systemdatumsformat ist europäisch, also TT-MM-JJJJ, CreationTimeakzeptiert aber nur das US-Datumsformat, also MM/TT/JJJJ (dasselbe gilt für LastWriteTime). Siehe Code unten, es ist übrigens PS v4.0.

# This gives error message: Cannot convert value "31-12-1998" to type "System.DateTime"
(Get-ChildItem oud_en_nieuw_beijum.mpg).CreationTime = '31-12-1998'

# This works correctly
(Get-ChildItem oud_en_nieuw_beijum.mpg).CreationTime = '12/31/1998'

# This gives error message: Cannot convert value "12/31/1998" to type "System.DateTime"
Get-Date -Date '12/31/1998'

# This works correctly
Get-Date -Date '31-12-1998'

Es scheint, dass die entgegengesetzten Datumsformate verwendet werden? Steckt dahinter eine Logik oder übersehe ich etwas CreationTime?Get-Date

Antwort1

Was Sie jetzt versuchen, ist, eine Zeichenfolge (das Datum) direkt in ein datetimeObjekt (die CreationTimeEigenschaft) umzuwandeln.

Wenn Sie einen String in umwandeln datetime, können Sie nur zwei Formate verwenden: das en-US-Kulturformat oder das ISO 8601-Format (auch bekannt als japanisches Datums-/Uhrzeitformat). Weitere Informationen hierzu finden Sie hier:https://stackoverflow.com/questions/14359053/warum verwendet Powershell immer eine US-Kultur, wenn es um das Casting auf Datetime geht?

Sie haben jetzt drei Möglichkeiten:

  • ISO-Format verwenden:(Get-ChildItem oud_en_nieuw_beijum.mpg).CreationTime = "1998-12-31"
  • Verwenden Sie en-US:(Get-ChildItem oud_en_nieuw_beijum.mpg).CreationTime = "12/31/1998"
  • Analysieren:(gci oud_en_nieuw_beijum.mpg).CreationTime = ([datetime]::Parse("31.12.1998"))

Wenn Sie parse()dies tun, analysiert PowerShell die Zeichenfolge mit den Informationen zu Ihrer lokalen Kultur, sodass das „europäische Format“ verarbeitet werden kann.

Wenn Sie Kulturinformationen analysieren möchten, die sich von Ihrer lokalen Kultur unterscheiden, können Sie einfach ein [cultureinfo]Objekt erstellen und das Datum analysieren. Beispiel:

$dateString = '10.12.2018'
$frenchCulture = [cultureinfo]::GetCultureInfo('fr-FR')
# Parsing with French Culture
[datetime]::Parse($dateString, $frenchCulture)

Antwort2

Ich habe (Get-Item Filename.extension).CreationTime=("6. Oktober 2020 17:47:22") verwendet und es funktioniert einwandfrei.

Dasselbe gilt, wenn Sie es für LastWriteTime und LastAccessTime verwenden.

verwandte Informationen