繁体   English   中英

将CSV日期字符串转换为另一种格式

[英]Converting CSV date string to another format

我得到了一个带有日期列的CSV文件,其格式为dd/MM/YYY HH:mm:ss ,例如14/11/2016 00:00:00

我正在尝试将该列上的格式批量转换为ISO-8601日期格式: YYYY-mm-dd HH:mm:ss

我尝试过:(我编辑了输入字符串格式的错误...)

Import-Csv someCSV.csv | % {
  $_.'[Date]' = ([datetime]::ParseExact(($_.'[Date]'),"dd/MM/YYYY HH:mm:ss").ToString('yyyy-MM-dd HH:mm:ss'))
} | Export-Csv 'C:\testBis.csv' -NoTypeInformation

我收到一个错误:

Cannot find an overload for "ParseExact" and the argument count: "2".
At line:1 char:69
+ ... Date]' ; ([datetime]::ParseExact(($_.'[Date]'),"dd/MM/YYY HH ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodException
    + FullyQualifiedErrorId : MethodCountCouldNotFindBest

我看了一眼,尝试使用Try parse解析了一些想法,但没有任何缝隙可以工作。

我不知道我要怎么做。 有什么建议么?

匹配年份的模式必须是yyyy (小写的y ),采样日期中没有逗号,并且您需要提供ParseExact()区域性信息。 我还建议不要使用正斜杠,否则它们将与计算机区域设置中配置的任何日期分隔符匹配。 并且您需要将修改后的记录回显到管道中,否则将没有任何输出。

$culture = [Globalization.CultureInfo]::InvariantCulture
Import-Csv someCSV.csv | ForEach-Object {
    $_.'[Date]' = [DateTime]::ParseExact($_.'[Date]', 'dd\/MM\/yyyy HH:mm:ss', $culture).ToString('yyyy-MM-dd HH:mm:ss')
    $_    # <-- feed modified record back into pipeline
} | Export-Csv 'C:\testBis.csv' -NoType

DateTime.ParseExact至少需要三个参数。 第三个参数是要使用的区域性。 您可以传递不变文化[System.Globalization.CultureInfo]::InvariantCulture ,例如:

([datetime]::ParseExact(($_.'[Date]'),"dd/MM/YYYY HH:mm:ss",[System.Globalization.CultureInfo]::InvariantCulture)

或更干净的版本:

$inv = [System.Globalization.CultureInfo]::InvariantCulture
$fmtFrom = "dd/MM/YYY HH:mm:ss"
$fmtTo   = "yyyy-MM-dd HH:mm:ss"

Import-Csv someCSV.csv | % {
    $_.'[Date]' = ([datetime]::ParseExact(($_.'[Date]'),$fmtFrom, $inv).ToString($fmtTo))
  } | Export-Csv 'C:\testBis.csv' -NoTypeInformation

我从格式字符串中删除了,因为您提到实际的格式是dd/MM/YYY HH:mm:ss ,而不是dd/MM/YYY, HH:mm:ss

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM