我正在编写日期和时间的本地化代码,当区域性设置为保加利亚语时,我看到一种奇怪的行为,而我传入的日期是在11月。
从本质上讲,我是在尝试调用:
if (DateTime.TryParse(theDateToParse, formatProvider, DateTimeStyles.None, out localDate))
{ //Do code work here }其中theDateToParse = 15-Нов-2013 15:20:39 (该值来自jquery datepicker,附加了时间,是11月15日),而jquery是bg-BG文化信息。
测试其他值和其他文化,问题似乎是特定于bg-BG文化中11月的任何日期。此外,如果我将其更改为使用完整的月份名称,它可以正确地解析它。
为了测试这个理论,我采用了另一种方法,在每个月的某一天创建了一个dateTime对象,并使用dd-MMM yyyy格式将它们转换为字符串。对于每个月,我都得到了一个简短的月份名称,除了11月,我得到了一个完整的月份名称。
我只是想看看有没有人知道为什么会发生这样的事情,或者有什么聪明的解决方案来解决这个问题。我花了一些时间寻找,但我甚至找不到遇到同样问题的人。
发布于 2013-07-16 03:18:06
运行以下代码:
var culture = CultureInfo.CreateSpecificCulture("bg-BG");
foreach (var name in culture.DateTimeFormat.AbbreviatedMonthNames)
Debug.WriteLine(name);给出这些月份名称的缩写:
януфевмарапрмайюниюлиавгсепоктноедек
在您的输入中,.Net似乎将11月的缩写设置为"ное",而不是"Нов“字符串。
我不会说保加利亚语,但谷歌翻译接受"ное“作为”11月“,但"Нов”被翻译成英语的“新”。所以我猜测源数据是不正确的。
最好的解决方案是永远不要在客户端和服务器之间以本地化字符串的形式传输日期。而应使用2013-11-15T15:20:39等ISO8601格式。
https://stackoverflow.com/questions/17655920
复制相似问题