我正在尝试格式化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:\HMDA\test.csv
不幸的是,这似乎没有做任何事情,只是给我一个解析错误,我似乎无法弄清楚为什么会这样。有没有办法可以说:
ForEach-Object{
$HMDA.A2:$HMDA.A63 = HMDA.$AC.Date.Format('YYYY-MM-DD')
}
答案 0 :(得分:2)
好的,这里有一些基本错误,但这只是我认为不太了解的问题。现在这很难准确回答,因为你没有给我们一个传入日期字段的例子,所以如果它有一些奇怪的格式,这可能会抛出错误,因为PowerShell无法识别字符串实际上是一个日期。
首先,如果你输入ForEach循环,你用$_
引用当前对象。如:
Import-Csv "C:\HMDA\$date.YieldTableFixed.csv" | ForEach-Object {
$_.Date = get-date $_.Date -f 'yyyy-MM-dd'
} | Export-Csv -NoTypeInformation C:\HMDA\test.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:\HMDA\test.csv
答案 1 :(得分:0)
ParseExact()
需要3个参数:日期字符串,格式字符串和格式提供程序(可能是$null
)。此外,您的输出format string不正确(年和日格式说明符必须小写),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:\HMDA\test.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:\HMDA\test.csv'