C# Parse抛出FormatException,与CultureInfo无关

C# Parse抛出FormatException,与CultureInfo无关,c#,datetime,datetime-format,cultureinfo,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")); D

我的机器配置为欧洲日期格式:
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:未将字符串识别为有效的日期时间


为什么任何文化信息都不允许我解析这个日期?我知道字符串最初是在哪个区域性中创建的(使用
DateTime.ToString()
),但仅此而已,所以我不想使用
ParseExact
,除非有一些API可以获取每个区域性的默认格式字符串。

正如您提到的,您配置了
dd/MM/yyyy

因此,
“2017年11月15日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"));

这在日期模式保留为默认模式的机器上不起作用:

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,否则这是正确的


如果您想绕过自定义设置,请创建一个
新的CultureInfo(“en-US”,false)

您是否尝试过使用
GetCultureInfo
?您的第二行对我来说很好(而第一行应该会抛出异常)。如果您已经将其作为日期时间使用,你为什么要把它解析成一个字符串,然后再转换成一个日期时间?@TJWolschon我把它作为另一个应用程序中的日期时间,它不会改变它的合同然后
DateTime.Parse(“11/15/2017 12:00:00 AM”,new CultureInfo(“en-us”,false))应该有帮助。这不是文化信息的原因吗?这是我机器的格式,如果我将我的机器更改为使用
MM/dd/yyyy
没有引发异常,为什么不能重写机器?