2014-11-05 22 views
0

我有一個csv文件,其中包含一些日期格式的字段。這是從CSV標題行與第一行沿:使用Powershell更新CSV中的日期字段

"id","start_time","end_time","station_id","location" 
"12617954","31/07/2014 4:38:49 AM","31/07/2014 4:39:19 AM","2","tv","home" 

CSV文件有很多項,我想每個日期轉換爲使用PowerShell自定義格式。自定義格式是yyyyMMdd-hh:mm:ss

迄今已嘗試過此功能,但沒有將結果寫入csv文件。我顯然不是專家,但我做錯了什麼?

$dateformats = [string[]]("dd/MM/yyyy hh:mm:ss tt","dd/MM/yyyy h:mm:ss tt") 
$csvfiles = Import-Csv -path "D:\new_creative.csv" 
ForEach ($line in $csvfiles) { 
    $starttime2 = [datetime]::ParseExact($line.start_time, $dateformats, [System.Globalization.CultureInfo]::InvariantCulture,[System.Globalization.DateTimeStyles]::None) 
    $starttime2.year.ToString() + $starttime2.month.toString().PadLeft(2,"0") + $starttime2.day.toString().PadLeft(2,"0") + "-" + $starttime2.Hour.toString().PadLeft(2,"0") + ":" + $starttime2.Minute.toString().PadLeft(2,"0") + ":" + $starttime2.Second.toString().PadLeft(2,"0") 
    $starttime = $line.start_time.Replace($starttime,$startime2) 
} 
$csvfiles | Export-Csv "D:\file2.csv" -Force -Notype 

回答

1

你可以做到這一點,如下所示:

$csv = Import-Csv -path "D:\new_creative.csv" 
$dateFormat = "yyyyMMdd-hh:mm:ss" 

ForEach($r in $csv) { 
    $r.start_time = [DateTime]::parse($r.start_time).ToString($dateFormat) 
    $r.end_time = [DateTime]::parse($r.end_time).ToString($dateFormat) 
} 

$csv | Export-Csv "D:\file2.csv" -Force -NoType 

使用DateTimeToString方法做轉換到你想要的格式。

每當您點擊start_timeend_time字段時,都會採用該值,將其轉換並覆蓋它,以便最終結果將在這些字段中包含您的轉換日期。

+0

這是完美的!非常感謝arco444。 – mikec 2014-11-05 22:24:22