在我正在编写的应用程序中,我想解析c#中使用阿拉伯语的特定日期。例如,日期可能如下所示:30.12.1989
但我想要这个输出:30.12.1989
我的问题是如何在c#中执行此操作以从该字符串中获取DateTime对象。
谁能告诉我怎么做到这一点?
非常感谢提前。
答案 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'}
};