DateTime ParseExact不适用于所有字符串

时间:2015-03-06 09:48:29

标签: .net parsing datetime powershell-v4.0

我现在正在编写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

2 个答案:

答案 0 :(得分:0)

您可能正在尝试解析无效日期字符串,或者您为输入指定了错误的格式。

示例:

  • “20140229133804”无效,因为它引用了不存在的日期
  • “20141811133804”无效,因为它将月份与日期相关(关于您的格式“yyyyMMddhhmmss”)。请注意,这种情况适用于小于12的天数,因此有时会出现“随机”错误。
  • “20141118133866”无效,因为它尝试在几秒钟内解析值66.
  • “20141118133804”无效,因为根据您的格式“yyyyMMddhhmmss”,它会尝试将值“13”从小时变为12小时有效间隔。

如果您要从文件中加载此日期列表,请查看文件结尾处的空行。

编辑: 在这种情况下,问题出在格式字符串上。它应该是“yyyyMMddHHmmss”24小时格式。

答案 1 :(得分:0)

这是Microsoft日期时间格式,称为CIM_DATETIME。您可以使用[System.Management.ManagementDateTimeConverter]::ToDateTime()作为整体提供的字符串来获取有效的datetime对象。请注意,如果您的字符串在.000000-000部分中具有三个零以外的值,则它是以分钟为单位的时区偏移量,例如"20141118133804.000000+180",并且需要进行说明。所描述的方法考虑到了这一点。你使用`DateTime.ParseExact'的解决方案使用24小时字符串格式是可以接受的,但不考虑时区偏移。在解析此格式的其他值时可能需要它。