【问题标题】:DateTime.parse string was not recognisedDateTime.parse 字符串未被识别
【发布时间】:2017-02-12 09:24:17
【问题描述】:

我不明白为什么我的字符串值一直抛出一个应该是有效字符串的异常。我有一个格式为"30/09/2016 14:55:00"(称为myDate)的字符串日期,并尝试了以下方法将其转换为日期时间格式:

DateTime.ParseExact(myDate, "dd/MM/yyyy HH:mm:ss", null);
DateTime.ParseExact(myDate, "dd/MM/yyyy HH:mm:ss", CultureInfo.CurrentCulture);
DateTime.Parse(myDate);

我看不到哪里出错了,是不是我遗漏了什么?

编辑:

myDate 的当前值

在调用 parse 时保持上下文

例外

对于将字符串解析为 DateTime 的所有其他版本也是如此

【问题讨论】:

  • 我也一直在查看以前的答案,所有这些都指向上述但没有成功
  • 那么你得到了什么异常,它说明了什么?一切都适合我...
  • @GiladGreen 我会发截图
  • 您目前的文化什么?
  • @Novastorm - 作为旁注,选项 1 和 2 是相同的。阅读this的最后一行

标签: c# date parsing datetime


【解决方案1】:

您的字符串包含额外的引号,您应该在调用DateTime.Parse 之前删除这些引号。您可以通过调用删除引号

myDate = myDate.Trim('"');
DateTime.ParseExact(myDate, "dd/MM/yyyy HH:mm:ss", null);

【讨论】:

  • null 用作IFormatProvider 可能很危险,因为这意味着“使用CurrentCulture 设置”,OP 的CurrentCulture 可能不会使用/ 作为DateSeparator 和/或: 作为TimeSeparator,在这种情况下,您的代码会抛出FormatException。最好指定一个适当的(可能是InvariantCulture)文化设置来防止这种情况。
【解决方案2】:

问题是你的字符串有额外的",然后当你解析它时会抛出异常。您的"30/09/2016 14:55:00" 字符串实际上是\""30/09/2016 14:55:00\""

去掉\"再解析:

string myDate = "\"30/09/2016 14:55:00\"";
var result = DateTime.ParseExact(myDate.Replace("\"",""), "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);

或者因为它总是在字符串的末尾,你可以使用.Trim 方法

【讨论】:

    【解决方案3】:

    您的字符串中似乎有多余的不需要的双引号。

    试试这个,看看它是否有效:

    var date = DateTime.ParseExact(myDate.Trim('\"'), "dd/MM/yyyy HH:mm:ss", CultureInfo.CurrentCulture);
    

    【讨论】:

      猜你喜欢
      • 2022-06-16
      • 1970-01-01
      • 2015-04-30
      • 2011-09-12
      • 2013-11-10
      • 1970-01-01
      • 1970-01-01
      • 2021-05-04
      相关资源
      最近更新 更多