C# GetCultureInfo(";en GB";)不';t与en US日期格式兼容,但与其他格式兼容

C# GetCultureInfo(";en GB";)不';t与en US日期格式兼容,但与其他格式兼容,c#,datetime,globalization,C#,Datetime,Globalization,为什么第一行代码抛出“字符串未被识别为有效的日期时间。”异常 en GB似乎与en US不兼容,但奇怪的是,它与zh CN和ru ru date格式字符串兼容 是的,我可以简单地将文化信息更改为en US,使其与en US日期格式字符串兼容。但我的问题是为什么en-GB使用zh-CN和ru-ru格式字符串 有什么想法吗 var obj = DateTime.Parse("11/20/2013 3:10:36 AM", CultureInfo.GetCultureInfo(0x08

为什么第一行代码抛出“字符串未被识别为有效的日期时间。”异常

en GB似乎与en US不兼容,但奇怪的是,它与zh CN和ru ru date格式字符串兼容

是的,我可以简单地将文化信息更改为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
0x0809en GB英语(英国)英语


谢谢,

您已指定希望在
en GB
中使用
DateFormat
,该格式通常为
dd/MM/yyyyy…
,并且它正在尝试创建一个月值为20的日期,该日期不存在

如果您将预期输入格式更改为
en US
,它将起作用,并且您的内部日期将是正确的。然后,如果愿意,可以将其输出为
en GB
格式

var obj = DateTime.Parse("11/20/2013 3:10:36 AM", CultureInfo.GetCultureInfo("en-US").DateTimeFormat);//en-US
string s = obj.ToString(CultureInfo.GetCultureInfo("en-GB").DateTimeFormat); //20/11/2013 03:10:36

我的猜测是en GB与zh CN兼容,因为该格式与ISO标准相同。然后它与ru兼容,因为唯一的区别是分隔符。美国的模式既不是也不是,看起来相当典型。解析器应该(但我没有检查)总是成功地解析ISO格式(yyyy/mm/dd hh:mm:ss),这是跨语言数据模型的最佳使用案例。

为什么会令人惊讶?英国使用日/月/年格式,而美国使用月/日/年格式。那为什么相同的文化信息在zh-CN和ru-ru中与日期格式字符串一起工作呢?俄文格式已经与英国格式相似,只是使用了不同的分隔符。而中国的一个显然是从今年开始的。。。据推测,它猜测下一个月将到来。当两个两位数的值相邻时,我怀疑它试图使用特定于区域性的月和日的“正常”顺序。
DateTime.Parse
真是一团糟™. 它很难解释你的字符串,而且很容易在你一点也不聪明的情况下出错。尽可能使用
DateTime.ParseExact
。我理解。但是我不明白为什么en-GB区域性信息与zh-CN和ru-ru中的日期格式字符串一起工作,它们的格式与en-GB完全不同。en-GB解析将接受一些不同的格式和分隔符。最重要的是字符串中日期部分的顺序。