我正在尝试格式化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'