C#DateTime解析国际文化

时间:2013-03-11 11:33:21

标签: c# parsing date internationalization cultureinfo

我正在尝试解析各种日期格式,日期编号,时间和年份组件是一致的,但是星期几和月份取决于设备。这些是来自iPad的一些示例结果

Isn Mac 11 16:25:58 2013

Ahd Mac 10 18:34:41 2013

Sab Mac 09 18:44:34 2013

Jum Mac 08 16:57:33 2013


Fri Mar 8 16:49:46 2013

Thu Mar 7 12:34:47 2013

Sat Jan 19 12:21:58 2013

英国人解析得很好,但马来西亚人(马来人)从不这样做

我用它来调试它:

        var allCultures = CultureInfo.GetCultures(CultureTypes.AllCultures);

        foreach (var culture in allCultures)
        {
            if (DateTime.TryParseExact("Isn Mac 11 16:25:58 2013", "ddd MMM d HH:mm:ss yyyy", culture, DateTimeStyles.None, out result))
                return;
        }

理想情况下,它会以这种格式处理所有可能的语言,而且我不必编写特定于语言的代码

我尝试使用以下文化代码手动解析马来西亚日期: 女士 MS-BN MS-MY

有什么想法吗?

感谢您的时间

2 个答案:

答案 0 :(得分:2)

这可能是Malasian文化的CultureInfo数据中的错误 - AbbreviatedDayNames数组看起来像这样:

Ahad 
Isnin 
Sel 
Rabu 
Khamis 
Jumaat 
Sabtu 

你不会Isn不存在 - 它是Isnin

为了进行比较,请查看DayNames

Ahad 
Isnin 
Selasa 
Rabu 
Khamis 
Jumaat 
Sabtu 

我从以下地方挑选了这些:

System.Globalization.CultureInfo.GetCultureInfo("ms-MY").DateTimeFormat

作为解决方案,看看您是否可以使用全天名称 - 在示例中使用Isnin代替Isn,返回正确的DateTime对象。

答案 1 :(得分:1)

我已经用马来西亚文化测试了你的约会时间。显然你的字符串有不正确的日期名称:

var dt = new DateTime(2013,03,11,16,25,58);
var currCult = CultureInfo.CreateSpecificCulture("ms-MY");
var str = dt.ToString("ddd MMM d HH:mm:ss yyy", currCult);
// ---> "Isnin Mac 11 16:25:58 2013"

Imho Isn!= Isnin