为什么第一行代码抛出“字符串未被识别为有效的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英语(英国)英语
谢谢,
答案 0 :(得分:7)
您已指定DateFormat
en-GB
dd/MM/yyyy ...
,其格式为en-US
,并且正在尝试创建月值为20的日期,不存在。
如果您将预期的输入格式更改为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
格式
{{1}}
答案 1 :(得分:0)
我的猜测是,en-GB与zh-CN兼容,因为该格式与ISO标准相同。然后它与ru-RU兼容,因为唯一的区别是定界符。美国格式也不是也不是,看起来很典型。解析器应该(但我没有检查过)总是成功地解析ISO格式(yyyy / mm / dd hh:mm:ss),这是跨语言数据模型的最佳案例。