【问题标题】:C# DateTime.Parse ErrorC# DateTime.Parse 错误
【发布时间】:2015-02-23 18:49:34
【问题描述】:

有人知道为什么会失败吗?我能够使用 ParseExact 解决它,但我想了解它为什么会失败。

DateTime test = DateTime.Parse("Dec 24  17:45");

日期 = 12 月 24 日失败并出现此错误:

在 mscorlib.dll 中出现“System.FormatException”类型的未处理异常 附加信息:日历 System.Globalization.GregorianCalendar 不支持字符串表示的 DateTime。

编辑: 感谢 Habib 注意到即使我没有收到错误,这也不是我所期望的结果。因此,当不与受支持的格式一起使用时,请小心使用 DateTime.Parse!

这是我为解决此问题所做的。我只需要处理两种不同的格式。当前年份为“MMM dd HH:mm”,否则为“MMM dd yyyy”

if (!DateTime.TryParseExact(inDateTime, "MMM dd HH:mm", System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.AllowWhiteSpaces,out outDateTime))
{
    if (!DateTime.TryParseExact(inDateTime, "MMM dd yyyy", System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.AllowWhiteSpaces, out outDateTime))
    {
        //Handle failure to Parse
    }
}

【问题讨论】:

  • 你能告诉我们你试图执行的确切代码吗?
  • 这是个好问题。
  • @A.Abramov -- OP 包含了几乎所有需要的东西。
  • 您可以看到您的字符串不是Parse 允许的“形式”之一。 msdn.microsoft.com/en-us/library/…
  • @wsware 您应该显示与ParseExact 一起使用的代码,以便您问题的未来读者可以看到应该如何进行解析;)

标签: c# datetime


【解决方案1】:

日期 = 12 月 24 日失败并出现此错误

DateTime.Parse 使用 standard formats 解析日期,它在 Day >= 24 时失败的原因是它正在考虑 该部分作为一个小时部分而不是一天部分假定。

由于允许的小时部分可能介于 0 到 23 之间,因此它适用于那些 日期。 (它不被认为是一天的一部分)

它也忽略Dec 部分并考虑该部分的当前日期。

考虑下面的例子:

DateTime test = DateTime.Parse("Dec 22 17:45");

返回:

test = {23/02/2015 10:17:00 PM}

查看设置为 22:17 或 10:17 PM 的时间部分

【讨论】:

  • 仅供参考,对于 0-23,它实际上并没有“工作”。对于Dec 23 17:45,它返回为2/23/2015 11:17:00 PMdotnetfiddle.net/WyVMRl
  • @tnw,我的意思是小时部分的值可以从 0 到 23。
  • 啊,是的,很公平,只是想确保区分。
  • 谢谢。当我得到一个时,我没有注意到结果有多么错误。由于 Parse 将当前日期/时间用于未知信息,因此我已将系统时钟设置回该日期并获得了正确的日期。
【解决方案2】:

您传递的日期时间格式无效。我认为问题在于您没有为日期部分提供一年。下面是一个接受的 DateTime 示例:

DateTime time = DateTime.Parse("Dec 24 2015 17:45");

【讨论】:

  • 重读问题后我明白了。对不起,我操之过急,我很高兴自己开始提供帮助和学习更多知识:)
猜你喜欢
  • 2016-04-09
  • 1970-01-01
  • 1970-01-01
  • 2011-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多