2016-03-24 16 views
1

Ich habe eine CSV, die eine Reihe von Spalten enthält, aber ich möchte nur die Beschreibungsspalte, eine Abteilung Spalte und eine Datumsspalte importieren. Ich möchte dann ein neues Objekt mit den Informationen zu Beschreibung, Abteilung und Datum erstellen, aber nur für Elemente, die ein Datum von 45 Tagen oder älter haben. Ich weiß, dass die Import-Csv bringt die "Item Date" -Spalte als Zeichenfolge, so dass ich etwas wie Get-Date oder datetime verwenden müssen, um es in ein Datumsformat zum Vergleich zu bekommen.Datum vom CSV-Import vergleichen Get-Date

$data = import-csv .\items.csv | select "Description", "Department", "Item Date" 
$CheckDate = (Get-Date).AddDays(-45) 
$data2 | Foreach {get-date $_."Item Date"} | 
    select "Description", "Department", "Item Date" 
$newdata = $data2 | where {$data."Item Date" -lt $CheckDate} 

Es kann ein einfacher Weg, dies zu tun, oder es kann ein Weg sein, diese Arbeit zu bekommen, aber ich habe Probleme.

Antwort

2

Definitiv etwas Platz für die Vereinfachung hier.

$CheckDate = (Get-Date).AddDays(-45) 
$data = Import-Csv .\items.csv | 
    Where-Object { 
     ($_."Item Date" -as [DateTime]) -lt $CheckDate 
    } 

werfen Sie einfach die „Item Date“ String als [DateTime] mit dem -as Operator und vergleichen Sie dann, dass auf Ihre $CheckDate im Where-Object Anruf.

1

Je nach dem Datumsformat, das in der CSV-Datei und den regionalen Einstellungen des Computers verwendet wird, funktioniert die einfache Umwandlung der Zeichenfolge in einen DateTime-Wert möglicherweise nicht. Wenn Sie feststellen, dass die Methode ParseExact() nicht verwendet wird. Und vielleicht ein calculated property, da Sie sowieso Spalten auswählen.

$fmt  = 'dd\/mm\/yyyy' 
$culture = [Globalization.CultureInfo]::InvariantCulture 

$data = Import-Csv .\items.csv | 
     Select-Object Description, Department, @{n='Item Date';e={ 
      [DateTime]::ParseExact($_.'Item Date', $fmt, $culture) 
     }} | 
     Where-Object { $_.'Item Date' -lt $CheckDate } 

Beachten Sie, dass nach vorne im Format-String Schrägstriche müssen entwertet werden, wenn Sie Schrägstriche wörtlichen nach vorne müssen übereinstimmen, sonst werden sie, was Datum Trennzeichen entsprechen in den Computer des regionalen Einstellungen konfiguriert ist.