CultureInfo.GetCultureInfo(“en-GB”)与en-US日期格式不兼容,但与其他人罚款

时间:2013-11-20 03:34:42

标签: c# datetime globalization

为什么第一行代码抛出“字符串未被识别为有效的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英语(英国)英语

谢谢,

2 个答案:

答案 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),这是跨语言数据模型的最佳案例。