我是Poweshell的新手,我制作了一个脚本,将SQL Select的结果导出到csv。但是我有两列的日期格式为mm-dd-yyyy,我希望它的格式为yyyy-MM-dd HH:mm:ss.fff。我只能转换一列,而在另一列中,我找不到转换的方法。
有人可以帮我转换两列吗?
_id Count
--- -----
@{STATUS=ERROR; Job=JOB2} 3
我需要转换的列是“ Dataemissao”和“ Dataultimaliq”
答案 0 :(得分:0)
在这种情况下,您在选择对象中需要很长的一行:
$DataSet.Tables[0] |
Select-Object -ExcludeProperty Dataemissao, Dataultimaliq @{Name = "Dataemissao"; Expression= { '{0:yyyy-MM-dd HH:mm:ss.fff}'-f [datetime]$_.Dataemissao }},
@{Name = "Dataultimaliq"; Expression= { '{0:yyyy-MM-dd HH:mm:ss.fff}'-f [datetime]::ParseExact($_.Dataultimaliq, 'MMM dd yyyy hh:mm tt', [cultureinfo]"en-US") }},
* | Export-Csv -Path $OuputFile -Encoding UTF8 -NoTypeInformation
或者,您可以在
之类的代码上方添加一个小的辅助函数。function Format-Date () {
param (
[string]$dateString,
[string]$format = 'MMM dd yyyy hh:mm tt'
)
$date = Get-Date
if ([datetime]::TryParseExact($dateString, $format, [cultureinfo]"en-US", 0, [ref]$date)) {
return '{0:yyyy-MM-dd HH:mm:ss.fff}'-f $date
}
}
并将其用于Dataultimaliq
:
@{Name = "Dataultimaliq"; Expression= { Format-Date $_.Dataultimaliq }},
如您所见,我在第二个参数$format
中添加了默认值“ MMM dd yyyy hh:mm tt”,因为这是返回的Dataultimaliq字段所使用的格式。 >
您也可以在Dataemissao字段上使用该格式,但我不知道该格式是什么。(显然,您的系统可以将其强制转换为DateTime对象,而没有任何问题)
我看到您稍后阅读了csv文件,并从中删除了引号。这可能会导致各种问题,因为有时CSV文件中需要使用引号,而您不应该简单地删除所有引号。看看this answer的代码,了解如何安全地完成此操作
P.S。 '{0:yyyy-MM-dd HH:mm:ss.fff}'-f [datetime]$_.Dataemissao
是一种获取特定格式日期的更“ PowerShelly”方式。它返回的内容与([datetime]$_.Dataemissao).ToString("yyyy-MM-dd HH:mm:ss.fff")
相同,但更加简洁。