【问题标题】:Datetime.ParseExact "String was not recognized as a valid DateTime" errorDatetime.ParseExact“字符串未被识别为有效的 DateTime”错误
【发布时间】:2016-08-03 10:23:29
【问题描述】:

为什么我不能解析这样的字符串:

DateTime date = DateTime.ParseExact("‎23.‎02.‎2016 08:59:35", 
                  "dd.MM.yyyy HH:mm:ss", CultureInfo.InvariantCulture);

抛出异常

字符串未被识别为有效的日期时间。

我真的不明白。

【问题讨论】:

    标签: c# datetime


    【解决方案1】:

    您的字符串中有一些宽度为零的 Unicode 字符。如果您删除它们,它将起作用:

    DateTime.ParseExact("23.02.2016 08:59:35",
        "dd.MM.yyyy HH:mm:ss", CultureInfo.InvariantCulture)
    

    【讨论】:

    • 谢谢,它成功了。但实际上这个字符串来自其他地方,我需要以编程方式从它的程序中删除零宽度的 Unicode 字符。我该怎么做?
    • 使用带有 while-list 的正则表达式,例如Regex.Replace("‎23.‎02.‎2016 08:59:35", @"[^\d\s\.:]", string.Empty).
    • @EliArbel 请问您是如何发现字符串中的字符宽度为零的?这对我来说很好奇,无论如何都很好!
    • @meJustAndrew 我猜到了,然后将其粘贴到编辑器中并检查光标移动。
    • 我正在比较 OP 和答案,我没有看到两个日期时间字符串的差异
    【解决方案2】:

    当心&nbsp 非破坏空间,它看起来像一个空间,但不是。您的日期和时间之间可能有其中之一....特别是如果您从 html 文档中提取...哦,痛苦,痛苦。不间断空格也被视为正则表达式中的空格,并且未被检测到。

    text = text.Replace('\u00A0',' ');
    

    【讨论】:

    • 原始字符串中实际的“奇怪”字符是日期中每个点后的 LTR unicode 标记 (0x200E)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多