1

我正在研究日期和时间的本地化代码,当文化设置为保加利亚语时,我看到了一种奇怪的行为,而我输入的日期是 11 月。

本质上,我正在尝试调用:

if (DateTime.TryParse(theDateToParse, formatProvider, DateTimeStyles.None, out localDate))
{ //Do code work here }

其中 theDateToParse = 15-Нов-2013 15:20:39 (此值来自 jquery 日期选择器,附加时间,为 11 月 15 日),formatProvider 是 bg-BG 文化信息。

测试其他价值观和其他文化,问题似乎是 bg-BG 文化中 11 月的任何日期所特有的。此外,如果我将其更改为使用完整的月份名称,它可以正确解析它。

为了验证这个理论,我反其道而行之,为每个月的一天创建了一个 dateTime 对象,并使用 dd-MMM-yyyy 格式将它们转换为字符串。对于每个月,我都有一个缩短的月份名称,除了 11 月,我有一个完整的月份名称。

我只是想看看是否有人对为什么会发生这种情况有任何背景,或者有任何聪明的解决方案来使这个案例有效。我花了一些时间搜索,我什至找不到遇到同样问题的人。

4

1 回答 1

4

运行此代码:

var culture = CultureInfo.CreateSpecificCulture("bg-BG");
foreach (var name in culture.DateTimeFormat.AbbreviatedMonthNames)
    Debug.WriteLine(name);

给出这些月份名称的缩写:

яну фев мар апр май юни юли авг сеп окт ное дек

.Net 的保加利亚语中 11 月的缩写似乎是“ное”,而不是您输入中的“Нов”字符串。

我不会说保加利亚语,但谷歌翻译接受“ное”为“November”,但“Нов”被翻译成英语为“new”。所以我的猜测是源数据不正确。

最好的解决方案是永远不要在客户端和服务器之间将日期作为本地化字符串传输。相反,请使用 ISO8601 格式,例如2013-11-15T15:20:39.

于 2013-07-15T19:18:05.763 回答