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
没有引发异常,为什么不能重写机器?