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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Powershell中如何将日期'2017年6月6日,08:09:05.000'转换为[DateTime]?相关的知识,希望对你有一定的参考价值。

当尝试转换时,我显然因为th符号而收到以下错误消息。

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

答案

最简单的方法可能是删除这些字符。我很确定你可以用Parse或ParseExact做到这一点,但我只是为了轻松而删除“th”。

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

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

为了完整起见,有一种方法可以使用parseexact()来获得这个。

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

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

另一答案

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

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

输出:

2017年6月6日08:09:05

希望能帮助到你

另一答案

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

[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 ')

他们都回归:

Tuesday, June 06, 2017 8:09:05 AM
另一答案

这样可行:

$DateFull -replace "nd",'' -replace "st",'' -replace "rd",'' -replace "th",''

以上是关于在Powershell中如何将日期'2017年6月6日,08:09:05.000'转换为[DateTime]?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中运行 powershell 命令

我们如何使用Windows Powershell脚本替换文本文件中的日期?

如何将日期时间从 PowerShell 输出转换为 yyyy-MM-dd HH:mm:ss 格式

如何使用 PowerShell 将 UTC 转换为 EST

在 PowerShell 中,如何将错误、警告、写入主机输出捕获到单个文件中?

如何将 df 中的列转换为具有日期时间格式的纪元,反之亦然?