DateTime.ParseExact FormatException

时间:2012-01-24 22:32:55

标签: .net datetime formatexception

为什么以下代码会生成FormatException?

DateTime.ParseExact("03/01/2012", "dd/MM/yyyy", null);

DateTime.ParseExact

也许这与代码在IIS 7.5 Express下作为MVC3站点执行逻辑的一部分运行这一事实有关?

3 个答案:

答案 0 :(得分:4)

您需要包含CultureInfo,例如:

DateTime.ParseExact("03/01/2012", "dd/MM/yyyy", new CultureInfo("en-US"));

格式字符串中的斜杠对文化敏感,如果未传入CultureInfo,则使用当前文化。您也可以使用CultureInfo.InvariantCulture,它会起作用。 Jon Skeet provides some detailed explanation here.

答案 1 :(得分:3)

取决于你的文化,取决于你的等式......

DateTime.ParseExact("03/01/2012", "dd/MM/yyyy", CultureInfo.InvariantCulture);

答案 2 :(得分:2)

根据documentation,如果满足以下条件之一,则会抛出FormatException

public static DateTime ParseExact(
    string s,
    string format,
    IFormatProvider provider
) 
  • s或format是一个空字符串。
  • s不包含与格式中指定的模式相对应的日期和时间。
  • s中的小时组件和AM / PM指示符不一致。

如果传入空IFormatProvider,我认为它默认为当前线程的文化。我必须在Reflector中看一下这个。你有什么理由想传递null吗?

<强>更新

我在.NET Reflector中查看它,默认为当前线程的DateTimeFormatInfo。我不知道是否允许我在这里发布代码。