格式异常 - 字符串未被识别为有效的DateTime

时间:2013-10-10 23:19:08

标签: c# datetime

我遇到类似的问题> Format exception String was not recognized as a valid DateTime

但是,我的规范要求日期格式为ddMMyyyy,因此我修改了我的代码,但我仍然遇到同样的错误

 DateTime now = DateTime.Now;
 DateTime dt = DateTime.ParseExact(now.ToString(), @"ddMMyyyy", CultureInfo.InvariantCulture);

我不明白为什么。

4 个答案:

答案 0 :(得分:1)

要使ParseExact起作用,进入的字符串必须与模式匹配完全匹配。在您提到的另一个问题中,文本来自一个Web表单,其中格式被指定为一种格式。

在您的情况下,您使用DateTime.Now.ToString()生成了日期,其格式不是ddMMyyyy。如果您想使日期往返,您需要指定两个地方的格式:

DateTime now = DateTime.Now;
DateTime dt = DateTime.ParseExact(now.ToString("ddMMyyyy"), @"ddMMyyyy", CultureInfo.InvariantCulture);

答案 1 :(得分:1)

调试代码并查看now.ToString()的结果是什么,它的格式不是“ddMMyyyy”,这就是解析失败的原因。如果您想以ddMMyyy格式输出now作为字符串,请尝试now.ToSTring(“ddMMyyyy”)。

答案 2 :(得分:1)

now.ToString()不返回以这种方式格式化的字符串。尝试使用now.ToString(“ddMMyyyy”)。 使用像“30041999”

这样的静态字符串进行测试可能会更好

答案 3 :(得分:1)

您的代码失败是因为您尝试以ddMMyyyy格式解析日期,默认情况下DateTime.ToString()将生成当前文化中包含日期和时间的格式。 对于我自己在澳大利亚的dd/MM/yyy hh:mm:ss p,例如11/10/2013 11:07:03 AM

您必须意识到,DateTime对象实际上将日期存储为单个组件(例如,日,月,年),只有在您将值输出为所需格式时才需要格式化。 E.g。

DateTime now = DateTime.Now;
string formattedDate = now.ToString("ddMMyyyy", DateTimeFormatInfo.InvariantInfo);

有关更多信息,请参阅api doc: http://msdn.microsoft.com/en-us/library/8tfzyc64.aspx