在Powershell中如何将日期'2017年6月6日,08:09:05.000'转换为[DateTime]?

时间:2017-08-24 14:44:38

标签: powershell powershell-v4.0

尝试转换时,由于th符号,我收到了以下错误消息。

  

无法将值“2017年6月6日,08:09:05.000”转换为“System.DateTime”。错误:“字符串未被识别为有效的DateTime。有   从索引6开始的未知单词。

4 个答案:

答案 0 :(得分:5)

最简单的方法可能是删除这些字符。我很确定你可以用Parse或ParseExact做到这一点,但我只是想删除" th"相反,为了方便。

$date = "June 6th 2017, 08:09:05.000"
$date = $date -replace "(\d)(th|nd|st|rd)",'$1'
[datetime]$date

替换" th"如果前面有一个数字。如果你碰巧有没有这些字符的日期,就不会发生任何事情,所以那里没有风险。由于像Augu st 这样的月份,用$date = $date -replace "th|nd|st|rd"彻底删除这些字母是不安全的。

为了完整起见,您可以使用parseexact()来获取此信息。

[DateTime]::ParseExact($date, "MMMM d\t\h yyyy, HH:mm:ss.FFF", [System.Globalization.CultureInfo]::InvariantCulture)

这样可以工作并涵盖一个基础。如果使用其他数字后缀会更难,所以第一个建议更好。

答案 1 :(得分:1)

删除'th'部分。你可以用任何东西替换它,最后在删除逗号之后将解决你解析它的目的。

$a="June 6th 2017, 08:09:05.000"
[System.DateTime]"$($a.Replace("th",'').Replace(',',''))"

输出:

06 June 2017 08:09:05

希望有所帮助

答案 2 :(得分:1)

正如其他人所建议的那样,如果它们存在,你需要摆脱'nd','th'等。我会像这样使用替换:

project/CMakeLists.txt

他们都回来了:

[datetime]("June 6th 2017, 08:09:05.000" -replace '(\d+)\w{2}\s','$1 ')
[datetime]("June 6 2017, 08:09:05.000" -replace '(\d+)\w{2}\s','$1 ')
[datetime]("6 June 2017, 08:09:05.000" -replace '(\d+)\w{2}\s','$1 ')

答案 3 :(得分:0)

有效:

$DateFull -replace "nd",'' -replace "st",'' -replace "rd",'' -replace "th",''
相关问题