【问题标题】:Use Powershell to update date fields in CSV使用 Powershell 更新 CSV 中的日期字段
【发布时间】:2014-11-05 10:54:03
【问题描述】:

我有一个 csv 文件,其中包含几个日期格式的字段。这是 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

【问题讨论】:

    标签: powershell csv


    【解决方案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 字段时,都会获取该值,对其进行转换然后覆盖它,因此最终结果将在这些字段中包含您转换后的日期。

    【讨论】:

    • 这太完美了!非常感谢 arco444。
    猜你喜欢
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 2020-04-04
    相关资源
    最近更新 更多