在c#中解析阿拉伯语日期

时间:2016-01-18 21:08:17

标签: c# datetime

在我正在编写的应用程序中,我想解析c#中使用阿拉伯语的特定日期。例如,日期可能如下所示:30.12.1989

但我想要这个输出:30.12.1989

我的问题是如何在c#中执行此操作以从该字符串中获取DateTime对象。

谁能告诉我怎么做到这一点?

非常感谢提前。

1 个答案:

答案 0 :(得分:0)

DateTime解析方法不支持

Eastern Arabic numerals,他们只接受Arabic numerals

另一方面,char.GetNumericValue method非常适合将数字Unicode字符的浮点表示形式设置为double,这对于东方阿拉伯数字也非常成功。

如果你的字符串总是基于这些数字dd.MM.yyyy格式,你可以用.分割你的字符串并从这些字符中获取它们的数值,解析那些部分的整数,在{中使用它们{3}}构造函数,并使用dd.MM.yyyy格式获取字符串表示形式,并使用格里高利历作为DateTime(year, month, day) InvariantCulture的文化。

var s = "٣٠.١٢.١٩٨٩";
var day =   Int32.Parse(string.Join("",
                        s.Split('.')[0].Select(c => char.GetNumericValue(c)))); // 30
var month = Int32.Parse(string.Join("",
                        s.Split('.')[1].Select(c => char.GetNumericValue(c)))); // 12
var year =  Int32.Parse(string.Join("",
                        s.Split('.')[2].Select(c => char.GetNumericValue(c)))); // 1989

var dt = new DateTime(year, month, day);
Console.WriteLine(dt.ToString("dd.MM.yyyy", CultureInfo.InvariantCulture)); // 30.12.1989

这里有 Calendar property

作为替代方案,您可以创建自己的Dictionary<char, char>结构,并且可以替换使用西方阿拉伯字符映射的东方阿拉伯字符。

var mapEasternToWestern = new Dictionary<char, char>
{ 
    {'٠', '0'}, 
    {'١', '1'}, 
    {'٢', '2'}, 
    {'٣', '3'}, 
    {'٤', '4'}, 
    {'٥', '5'}, 
    {'٦', '6'}, 
    {'٧', '7'}, 
    {'٨', '8'}, 
    {'٩', '9'}
};