3

为什么下面的代码会生成 FormatException?

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

DateTime.ParseExact

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

4

3 回答 3

5

您需要包含 CultureInfo,例如:

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

格式字符串中的斜杠对文化敏感,如果您不传入 CultureInfo,则使用当前文化。您也可以使用CultureInfo.InvariantCulture它,它会起作用。Jon Skeet 在这里提供了一些详细的解释。

于 2012-01-24T22:36:06.850 回答
4

取决于你的文化,把它排除在外……

DateTime.ParseExact("03/01/2012", "dd/MM/yyyy", CultureInfo.InvariantCulture);
于 2012-01-24T22:36:19.500 回答
3

根据文档,aFormatException被抛出,给定以下条件之一:

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

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

更新:

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

于 2012-01-24T22:39:35.373 回答