无论CultureInfo如何,DateTime.Parse都会抛出FormatException

时间:2018-05-15 12:34:44

标签: c# datetime datetime-format cultureinfo

我的机器配置了欧洲日期格式:dd/MM/yyyy

运行以下任何一行时:

DateTime.Parse("11/15/2017 12:00:00 AM");
DateTime.Parse("11/15/2017 12:00:00 AM", CultureInfo.CreateSpecificCulture("en-US"));
DateTime.Parse("11/15/2017 12:00:00 AM", CultureInfo.CreateSpecificCulture("fr-FR"));
DateTime.Parse("11/15/2017 12:00:00 AM", CultureInfo.CreateSpecificCulture("en-GB"));

我正在

  

System.FormatException:String未被识别为有效的DateTime。

为什么没有任何文化信息允许我解析这个日期?我知道最初创建字符串的文化(使用DateTime.ToString()),但就是这样,所以我不想使用ParseExact,除非有一些API来获取每个文化的默认格式字符串

2 个答案:

答案 0 :(得分:1)

这适用于日期模式为默认值的计算机:

var culture = CultureInfo.CreateSpecificCulture("en-US");
Console.WriteLine(culture.DateTimeFormat.ShortDatePattern);
Console.WriteLine(culture.DateTimeFormat.ShortTimePattern);
var date = DateTime.Parse("11/15/2017 12:00:00 AM", culture);
Console.WriteLine(date);

en-US的默认日期模式为“M/d/yyyy”,时间模式为“h:mm tt”。

除非您修改当前文化的系统设置,并且该文化是en-US,否则这是正确的。

如果您想绕过自定义设置,请创建new CultureInfo("en-US", false)

答案 1 :(得分:0)

如您所述,您配置了dd/MM/yyyy

因此"11/15/2017 12:00:00 AM"无效。它应该是:

"15/11/2017 12:00:00 AM"`

作为一种好习惯,最好使用ParseExact,您可以在其中指定输入字符串的格式。尝试:

DateTime.ParseExact("11/15/2017 12:00:00 AM", "MM/dd/yyyy", System.Globalization.CultureInfo.GetCultureInfo("en-US"));