2017-01-17 7 views
0

Ich habe eine CSV-Datei mit einer Datumsspalte im Format dd/MM/YYY HH:mm:ss, z. 14/11/2016 00:00:00.Konvertieren CSV-Datum Zeichenfolge in ein anderes Format

ich zu Charge bin versucht, wandeln die Formatierung auf dieser Spalte zu einem ISO-8601 Datumsformat: YYYY-mm-dd HH:mm:ss

ich versucht habe: (Ich habe bearbeiten ich auf Eingabestring-Format hatte einen Fehler ...)

Import-Csv someCSV.csv | % { 
    $_.'[Date]' = ([datetime]::ParseExact(($_.'[Date]'),"dd/MM/YYYY HH:mm:ss").ToString('yyyy-MM-dd HH:mm:ss')) 
} | Export-Csv 'C:\testBis.csv' -NoTypeInformation 

ich erhalte eine Fehlermeldung:

Cannot find an overload for "ParseExact" and the argument count: "2". 
At line:1 char:69 
+ ... Date]' ; ([datetime]::ParseExact(($_.'[Date]'),"dd/MM/YYY HH ... 
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [], MethodException 
    + FullyQualifiedErrorId : MethodCountCouldNotFindBest

ich habe einen Blick hatte und tryed mit Try Parse und trennen paar Ideen, aber nichts Naht zu arbeiten.

Ich weiß nicht, was ich falsch mache. irgendwelche Vorschläge?

+2

ParseExact benötigt * drei * Parameter –

+2

.. warum können die Leute tatsächlich keine Fehlermeldungen lesen, wie ist das ein Ding? – specializt

Antwort

1

Die pattern für das Jahr muss übereinstimmen yyyy (mit Kleinbuchstaben y), gibt es kein Komma in Ihrer Probe Datum, und Sie müssen Kulturinformationen für ParseExact() bereitstellen. Ich würde auch empfehlen, die Schrägstriche zu umgehen, sonst passen sie zu dem Datum, das in den regionalen Einstellungen des Computers konfiguriert ist. Und Sie müssen den geänderten Datensatz in der Pipeline zurückgeben, sonst würde nichts exportiert werden.

+1

würde nicht Kultur als Parameter in der ParseExact-Funktion gehen müssen? – maco1717

+0

Ich tat das und es funktionierte. Vielen Dank. – maco1717

+0

@ maco1717 In der Tat würde es. Fest. –

0

DateTime.ParseExact benötigt mindestens drei Parameter. Der dritte Parameter ist die zu verwendende Kultur. Sie können die invariante Kultur [System.Globalization.CultureInfo]::InvariantCulture, zum Beispiel passieren:

([datetime]::ParseExact(($_.'[Date]'),"dd/MM/YYYY HH:mm:ss",[System.Globalization.CultureInfo]::InvariantCulture) 

oder eine sauberere Version:

$inv = [System.Globalization.CultureInfo]::InvariantCulture 
$fmtFrom = "dd/MM/YYY HH:mm:ss" 
$fmtTo = "yyyy-MM-dd HH:mm:ss" 

Import-Csv someCSV.csv | % { 
    $_.'[Date]' = ([datetime]::ParseExact(($_.'[Date]'),$fmtFrom, $inv).ToString($fmtTo)) 
    } | Export-Csv 'C:\testBis.csv' -NoTypeInformation 

ich die , aus dem Format-String entfernt, weil Sie erwähnt, dass das tatsächliche Format ist dd/MM/YYY HH:mm:ss, nicht dd/MM/YYY, HH:mm:ss

+0

Dies wird nicht funktionieren. Ihre Eingabeformatzeichenfolge ist weiterhin ungültig, und es wird keine Ausgabe erstellt, da die geänderten Datensätze nicht an die Pipeline zurückgegeben werden. –

Verwandte Themen