Powershell以CSV格式转换日期格式

Powershell以CSV格式转换日期格式,powershell,csv,Powershell,Csv,我有一个包含以下数据的CSV文件 "Date","Time","Name","SourceIP","DestinationIP" "Sep 1","03:55:57","mmt-5","172.16.48.158","22.22.22.22" "Sep 1","03:55:57","mmt-5","172.16.48.158","22.22.22.22" "Sep 1","03:55:57","mmt-5","172.16.48.158","22.22.22.22" "Sep 1","0

我有一个包含以下数据的CSV文件

"Date","Time","Name","SourceIP","DestinationIP"
"Sep  1","03:55:57","mmt-5","172.16.48.158","22.22.22.22"
"Sep  1","03:55:57","mmt-5","172.16.48.158","22.22.22.22"
"Sep  1","03:55:57","mmt-5","172.16.48.158","22.22.22.22"
"Sep  1","03:55:57","mmt-5","172.16.48.158","22.22.22.22"
我想将日期转换为更有用的日期,如2016年1月9日(年份将是当前年份)。
我怎样才能做到这一点

使用
[DateTime]
类的
ParseExact
方法很容易。您提供一个日期字符串,告诉它日期的格式,并提供区域性或提供程序或其他内容,但我总是使用
$null

[datetime]::ParseExact("Sep  1","MMM  d",$null)
结果是:

Thursday, September 1, 2016 12:00:00 AM
所以你可以这样做:

$Array | ForEach{[datetime]::ParseExact($_.Date,"MMM  d",$null)}
这将把每个条目的Date属性转换为有效的[datetime]对象。然后,您只需按照自己的意愿对其进行格式化:

$Array | ForEach{[datetime]::ParseExact($_.Date,"MMM  d",$null).ToString("M-d-yyyy")}
这将产生:

9-1-2016
或者您要求使用
“MM dd yyyy”
获得
09-01-2016
的确切信息

编辑:感谢wOxxOm教会我在处理非本地化日期格式时第三个参数的必要性!因此,如果需要对其他区域性进行本地化,则需要包含最后一个参数。可以这样做:

$Culture = [cultureinfo]::GetCultureInfoByIetfLanguageTag('en-US')
$Array | ForEach{[datetime]::ParseExact($_.Date,"MMM  d",$Culture).ToString("MM-dd-yyyy")}
Edit2:确定,要用此信息替换当前的
Date
字段,您可以将数组传递给
Select
命令,并动态创建一个新的
Date
属性,丢弃原始属性,然后将其传递给
Export CSV

$Array | Select *,@{l='Date';e={[datetime]::ParseExact($_.Date,"MMM  d",$null).ToString("M-d-yyyy")}} -Exclude Date | Export-CSV D-Sample-2.csv -NoType

需要注意的是,在系统区域设置与解析日期不同的操作系统上,需要显式的区域性信息,而不是
$null
,例如
[cultureinfo]::GetCultureInfo('en-US')
谢谢。我似乎很困惑。它将输出我想要的日期格式,但不会修改我的CSV文件。以下是我尝试过的
$Array=import csv D-sample-1.csv$Array | ForEach{[datetime]::ParseExact($.Date,“MMM D”,MMM D,$null)。ToString(“M-D-yyyy”)}$Array | export csv D-sample-2.csv-notype
@Eric您发布的代码片段从不修改您创建的$Array。执行导入,修改日期,然后直接将其发送到导出-csv@StephenP我在这方面有点新手。我试过了,但运气不好<代码>导入csv D-sample-1.csv$Array | ForEach{[datetime]::ParseExact($.Date,“MMM D”,“null”).ToString(“M-D-yyyy”)}导出csv D-sample-2.csv-notype