【问题标题】:Parsing a date time in november using bg-BG culture and dd-MMM-yyyy format.使用 bg-BG 文化和 dd-MMM-yyyy 格式解析 11 月的日期时间。
【发布时间】:2013-07-13 10:00:00
【问题描述】:

我正在编写日期和时间的本地化代码,当文化设置为保加利亚语时,我看到了一个奇怪的行为,而我输入的日期是 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 月,我有一个完整的月份名称。

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

【问题讨论】:

    标签: c# datetime datepicker


    【解决方案1】:

    运行此代码:

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

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

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

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

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

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

    【讨论】:

    • 维基百科also has这个词noémvri,没有任何nov-,所以noe或(西里尔文)ное似乎合乎逻辑缩写。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 2018-02-14
    • 2021-07-18
    • 2013-11-20
    • 1970-01-01
    • 2021-07-20
    相关资源
    最近更新 更多