使用PowerShell以CSV格式转换日期格式

时间:2014-01-30 13:30:16

标签: powershell csv

我有两个包含50列和超过10K行的CSV文件。有一列具有日期时间值。在某些记录中,它是01/18/2013 18:16:32,有些记录是16/01/2014 17:32。

我想要转换列数据,如下所示:01/18/2013 18:16。我想删除秒值。我想通过PowerShell脚本来完成它。

示例数据:

10/1/2014 13:18
10/1/2014 13:21
15/01/2014  12:03:19
15/01/2014  17:39:27
15/01/2014  18:29:44
17/01/2014  13:33:59

1 个答案:

答案 0 :(得分:1)

由于您无论如何都不会转换为合理的日期格式,您只需要对该列进行正则表达式替换:

Import-Csv foo.csv |
  ForEach-Object {
    $_.Date = $_.Date -replace '(\d+:\d+):\d+', '$1'
  } |
  Export-Csv -NoTypeInformation foo-new.csv

您也可以使用日期解析的路线,但这可能有点慢:

Import-Csv foo.csv |
  ForEach-Object {
    $_.Date = [datetime]::Parse($_.Date).ToString('MM/dd/yyyy HH:mm')
  } |
  Export-Csv -NoTypeInformation foo-new.csv

如果你确定没有其他时间戳或任何其他地方可能看起来像这样的东西,你也可以直接替换看起来像它的所有内容,甚至不用解析为CSV:

$csv = Get-Content foo.csv -ReadCount 0
$csv = $csv -replace '(\d{2}/\d{2}/\d{4} \d{2}:\d{2}):\d{2}', '$1'
$csv | Out-File foo-new.csv