DateTime.Parse 抛出 FormatException 而不管 CultureInfo
DateTime.Parse throws FormatException regardless of 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 was not recognized as a valid DateTime.
为什么任何文化信息都不允许我解析这个日期?我知道字符串最初是在哪种文化中创建的(使用 DateTime.ToString()
),但仅此而已,所以我不想使用 ParseExact
,除非有一些 API 来获取默认值每种文化的格式字符串。
如您所述,您的配置为 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"));
这在日期模式保留为默认值的机器上确实有效:
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)
。
我的机器配置了欧洲日期格式: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 was not recognized as a valid DateTime.
为什么任何文化信息都不允许我解析这个日期?我知道字符串最初是在哪种文化中创建的(使用 DateTime.ToString()
),但仅此而已,所以我不想使用 ParseExact
,除非有一些 API 来获取默认值每种文化的格式字符串。
如您所述,您的配置为 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"));
这在日期模式保留为默认值的机器上确实有效:
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)
。