使用bg-bg区域性和dd-MMM-yyyy格式解析11月的日期时间

本文关键字:11月 日期 时间 格式 bg-bg 区域性 dd-MMM-yyyy 使用 | 更新日期: 2023-09-27 18:22:18

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

本质上,我试图调用:

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

其中,DateToParse=15-Нов-2013 15:20:39(该值来自jquery日期选择器,后面附加一个时间,为11月15日),formatProvider为bg bg区域性信息。

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

为了测试这一理论,我采取了另一种方法,为每个月的某一天创建了一个dateTime对象,并使用dd-MMM-yyyy格式将它们转换为字符串。每个月我都有一个缩短的月名,除了十一月,我有一个完整的月名。

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

使用bg-bg区域性和dd-MMM-yyyy格式解析11月的日期时间

运行此代码:

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

给出以下月份名称缩写:

看起来.Net在保加利亚语中十一月的缩写是"ное",而不是你输入的"Нов"字符串。

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

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