在 CSV 中设置日期列的格式



我正在尝试格式化CSV第一列中的某些日期。我更愿意使用像powershell这样的东西,因为我计划自动执行此任务。有没有人对将日期格式从 MM/DD/YYY 更改为 YYYY-MM-DD 的最佳方法有任何建议?我试过这样的事情:

$date = date -f ('yyyyMMdd')
$HMDA = Import-Csv "C:HMDA$date.YieldTableFixed.csv"
   ForEach-Object {
      $HMDA.Date = [datetime]::ParseExact($HMDA.Date).ToString('YYYY-MM-DD')
   } |
   Export-Csv -NoTypeInformation C:HMDAtest.csv

不幸的是,这似乎什么也没做,只是给了我一个解析错误,我似乎无法弄清楚为什么会这样。有没有办法我可以这样说:

ForEach-Object{
   $HMDA.A2:$HMDA.A63 = HMDA.$AC.Date.Format('YYYY-MM-DD')
}

好的,这里有一些基本错误,但我认为这只是一个不了解的问题。现在这很难准确回答,因为您没有向我们提供传入日期字段的示例,因此如果它具有一些奇怪的格式,这可能会引发错误,因为 PowerShell 无法识别字符串实际上是日期。

首先,如果通过管道连接到 ForEach 循环,则使用 $_ 引用当前对象。如:

Import-Csv "C:HMDA$date.YieldTableFixed.csv" | ForEach-Object {
    $_.Date = get-date $_.Date -f 'yyyy-MM-dd'
} | Export-Csv -NoTypeInformation C:HMDAtest.csv

正如我最近从SO上的其他人那里学到的那样,可能更简单的是使用Select,动态创建更新的属性,然后排除原始属性,有效地将其替换为新属性。像这样:

Import-Csv "C:HMDA$date.YieldTableFixed.csv" | 
    Select *,@{label = 'Date';expression={get-date $_.Date -f 'yyyy-MM-dd'}} -ExcludeProperty Date | 
    Export-Csv -NoTypeInformation C:HMDAtest.csv

ParseExact()需要 3 个参数:日期字符串、格式字符串和格式提供程序(可能是$null)。此外,输出格式字符串不正确(年和日格式说明符需要小写),并且ForEach-Object从管道读取。

更改此设置:

$HMDA = Import-Csv "C:HMDA$date.YieldTableFixed.csv"
  ForEach-Object {
    $HMDA.Date = [datetime]::ParseExact($HMDA.Date).ToString('YYYY-MM-DD')
  } |
  Export-Csv -NoTypeInformation C:HMDAtest.csv

进入这个:

Import-Csv 'C:HMDA$date.YieldTableFixed.csv' | ForEach-Object {
  $_.Date = [DateTime]::ParseExact($_.Date, '*M/dd/yyyy', $null).ToString('yyyy-MM-dd')
  $_
} | Export-Csv -NoTypeInformation 'C:HMDAtest.csv'

相关内容

  • 没有找到相关文章

最新更新