【发布时间】:2013-11-20 03:34:41
【问题描述】:
为什么第一行代码会抛出“String was not known as a valid DateTime.”异常?
en-GB 似乎与 en-US 不兼容,但奇怪的是与 zh-CN 和 ru-RU 日期格式字符串兼容。
是的,我可以简单地将文化信息更改为 en-US 以使其与 en-US 日期格式字符串兼容。但我的问题是,为什么 en-GB 可以使用 zh-CN 和 ru-RU 格式字符串?
有什么想法吗?
var obj = DateTime.Parse("11/20/2013 3:10:36 AM", CultureInfo.GetCultureInfo(0x0809).DateTimeFormat);//en-US
obj = DateTime.Parse("2013/11/20 3:16:08", CultureInfo.GetCultureInfo(0x0809).DateTimeFormat);//zh-CN
obj = DateTime.Parse("20.11.2013 3:17:44", CultureInfo.GetCultureInfo(0x0809).DateTimeFormat); //ru-RU
0x0809 zh-CN 英语(英国)英语
谢谢,
【问题讨论】:
-
为什么会令人惊讶?英国使用日/月/年格式,而美国使用月/日/年格式。它们绝对不同。
-
那么为什么相同的文化信息适用于zh-CN和ru-RU中的日期格式字符串?
-
俄罗斯的形式已经与英国的形式相似,只是使用了不同的分隔符。而中国的显然是从年份开始的……据推测它猜测下一个月份。当您有两个相邻的两位数值时,我怀疑它会尝试使用特定于文化的“正常”月份和日期顺序。
-
DateTime.Parse真的搞砸了™。它会努力解释您的字符串,并且很容易在您不明智的情况下出错。尽可能使用DateTime.ParseExact。
标签: c# datetime globalization