我有一个包含以下数据的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"
我想将日期转换为更有用的东西,比如09-01-2016(今年将是当年)。 我怎么能做到这一点?
答案 0 :(得分:2)
使用[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