【问题标题】:String was not recognized as a valid datetime exception with DateTime.PraseExact字符串未被识别为 DateTime.PraseExact 的有效日期时间异常
【发布时间】:2015-05-06 16:59:22
【问题描述】:

我想将日期时间转换为特定格式并将其保存到 Object 类型的变量中,但我遇到了错误,因为 String 未被识别为有效的 DateTime

在我尝试过的代码下方

string regDate = DateTime.ParseExact("05/07/2015 19:41:06 PM", "MM-dd-yyyy HH:mm tt", CultureInfo.InvariantCulture);

输入格式为“05/07/2015 19:41:06 PM”,我希望输出格式为 mm/dd/yyyy 格式,还包含小时-分钟-秒。

【问题讨论】:

  • ParseExact 输入格式(即使用/和秒)到一个日期,然后用所需的输出格式调用它的 ToString
  • 时间是 24 小时制,不能采用 AM / PM,因为它是 12 小时制
  • Convert.ToString 在该代码中不是必需的,因为您已经有一个字符串文字。

标签: c# datetime


【解决方案1】:

你得到的错误是合理的,因为你传递的字符串没有确切的格式,你传递给ParseExact

请尝试以下方法:

var regDate = DateTime.ParseExact("05/07/2015 19:41:06 PM", "MM/dd/yyyy HH:mm:ss tt", CultureInfo.InvariantCulture);

此外,您无需将字符串转换为字符串,就像您在 Convert.ToString("05/07/2015 19:41:06 PM") 中所做的那样。

检查这个.NET Fiddle

【讨论】:

  • 即使这段代码给出了同样的错误“字符串未被识别为有效的日期时间”
  • @Henriques 请再次检查。我做了一个更正。谢谢!
  • 这是工作 fibe,但我只需要一年的 2 个部分,即 YY,但是当我将上面的内容更改为“MM/dd/yy HH:mm:ss tt”时,它会给出相同的错误“String未被识别为有效的日期时间”
  • @Henriques 你的意思是说你只需要两年的时间?您收到此错误的原因是您尝试解析字符串并使用一种方法创建DateTime,在该方法中您明确说明了字符串的格式。如果字符串的格式不正确,则解析将失败并引发异常。这就是使用这种方法的目的。
  • @Henriques 当我们解析一个字符串时,我们想要基于它创建一个对象。有时,我们可能想要解析一个字符串,它是一个数字的字符串表示形式。其他时候,我们可能想要解析一个字符串,它是日期时间的字符串表示形式等等。基本上,这个 Parse the input 背后有一个简单的理论。如果解析成功,您将得到您正在寻找的信息。而如果解析失败,就会出错。不多也不少。另一方面,当我们想要字符串表示对象时,我们可以指示我们想要它的方式。
【解决方案2】:

我不能发表评论,否则我会。您需要结合 Christos 的回答和 Imranullah Khan 的评论

var regDate = DateTime.ParseExact("05/07/2015 19:41:06", "MM/dd/yyyy HH:mm:ss", CultureInfo.InvariantCulture);

var regDate = DateTime.ParseExact("05/07/2015 07:41:06 PM", "MM/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);

您不能将 AM/PM 包含在 24 小时制 (19:41:06) 中。因此,要么删除 PM 和 tt,要么包括 tt 并将 HH 更改为 hh,然后将时间更改为 07:41:06。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 2013-02-07
    相关资源
    最近更新 更多