我的机器配置了欧洲日期格式: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来获取每个文化的默认格式字符串
答案 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"));