使用bg-BG文化和dd-MMM-yyyy格式解析11月的日期时间。

时间:2013-07-15 13:52:00

标签: c# datetime datepicker

我正在研究日期和时间的本地化代码,当文化被设置为保加利亚语时,我看到一种奇怪的行为,我传递的日期是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文化信息。

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

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

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

1 个答案:

答案 0 :(得分:4)

运行此代码:

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

给出这些月份名称缩写:

  

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

看起来.Net在保加利亚语中的11月缩写为“ное”,而不是输入中的“Нов”字符串。

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

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