我现在正在编写PS脚本,我需要格式化字符串,如" 20141118133804"使用函数到DateTime:
Function Convert-Date ([string]$parseDate)
{
[regex]$r = "[^0-9]"
[string]$parseDate = $r.Replace($parseDate,"")
$convDate = [DateTime]::ParseExact($parseDate,"yyyyMMddhhmmss",$null)
return $convDate
}
输出如下:
Mittwoch,2014年11月5日09:45:22 Mittwoch,16。Juli 2014 04:51:38 Mittwoch,2014年8月6日05:35:16 Ausnahme beim Aufrufen von" ParseExact" mit 3 Argument(en):"字符串未被识别为a 有效的DateTime。"在 C:\ Users \ xxx \ Desktop \ Get-RDS-CALs-Per-Device.ps1:34 Zeichen:5 + $ convDate = [DateTime] :: ParseExact($ parseDate," yyyyMMddhhmmss",$ null) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:NotSpecified:(:) [],MethodInvocationException + FullyQualifiedErrorId:FormatException
我已经尝试改变CultureInfo,但效果相同,没有。
有谁知道为什么会出现这种错误?
先谢谢。 问候和问候 IG
答案 0 :(得分:0)
您可能正在尝试解析无效日期字符串,或者您为输入指定了错误的格式。
示例:
如果您要从文件中加载此日期列表,请查看文件结尾处的空行。
编辑: 在这种情况下,问题出在格式字符串上。它应该是“yyyyMMddHHmmss”24小时格式。
答案 1 :(得分:0)
这是Microsoft日期时间格式,称为CIM_DATETIME
。您可以使用[System.Management.ManagementDateTimeConverter]::ToDateTime()
作为整体提供的字符串来获取有效的datetime对象。请注意,如果您的字符串在.000000-000
部分中具有三个零以外的值,则它是以分钟为单位的时区偏移量,例如"20141118133804.000000+180"
,并且需要进行说明。所描述的方法考虑到了这一点。你使用`DateTime.ParseExact'的解决方案使用24小时字符串格式是可以接受的,但不考虑时区偏移。在解析此格式的其他值时可能需要它。