如何将英文数字转换为阿拉伯数字?

Lol*_*Run 11 c# cultureinfo arabic

我有这个C#代码

DateTime.Now.ToString("MMMM dd, yyyy");
Run Code Online (Sandbox Code Playgroud)

现在当前的线程正在加载阿拉伯文化.所以结果是这样的

???? 19, 2010
Run Code Online (Sandbox Code Playgroud)

但我不希望'2010'和'19'用英语(也称拉丁语或西阿拉伯语数字) - 我想要东阿拉伯数字,如"2".

我试过了

DateTime.Now.ToString("MMMM dd, yyyy", CultureInfo.GetCultureInfo("ar-lb"));
Run Code Online (Sandbox Code Playgroud)

给出了相同的结果.那么任何想法?

Mar*_*l B 15

这个解决方法(只列出你想在字符串数组中使用这些数字的所有文化):

private static class ArabicNumeralHelper
{
    public static string ConvertNumerals(this string input)
    {
        if (new string[] { "ar-lb", "ar-SA" }
              .Contains(Thread.CurrentThread.CurrentCulture.Name))
        {
            return input.Replace('0', '\u06f0')
                    .Replace('1', '\u06f1')
                    .Replace('2', '\u06f2')
                    .Replace('3', '\u06f3')
                    .Replace('4', '\u06f4')
                    .Replace('5', '\u06f5')
                    .Replace('6', '\u06f6')
                    .Replace('7', '\u06f7')
                    .Replace('8', '\u06f8')
                    .Replace('9', '\u06f9');
        }
        else return input;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后使用该方法,为strings您想要的所有"中央阿拉伯数字",如下所示:

DateTime.Now.ToString().ConvertNumerals();
Run Code Online (Sandbox Code Playgroud)


Jam*_*ack 6

作为一个快速测试,我写这篇文章列出了当年没有"2010"的所有文章:

        foreach (var ci in 
            from c in CultureInfo.GetCultures(CultureTypes.AllCultures)
            where !c.IsNeutralCulture
            let date = DateTime.Now.ToString("MMMM dd, yyyy", c)
            where !date.Contains("2010")
            orderby c.Name
            select new {c.Name, date})
        {
            Console.WriteLine("{0} : {1}", ci.Name, ci.date);
        }
Run Code Online (Sandbox Code Playgroud)

结果是:

ar-SA : ???? ????? 05, 1431
dv-MV : ???? ????? 06, 1431
prs-AF : ???? ????? 06, 1431
ps-AF : ???? ????? 06, 1431
th-TH : ?????????? 19, 2553
Run Code Online (Sandbox Code Playgroud)

要将数字转换为阿拉伯语文本,看起来这个"NumToArabicString"项目将会这样做.它看起来并不像.net框架中有任何内置.


小智 6

唯一的解决方案是手动转换数字。

您可以使用CurrentCulture.NumberFormat.NativeDigits数组而不是显式提供 Unicode 字符来支持除阿拉伯-印度数字之外的任何其他语言,但就文化感知类的内置支持而言,例如DateTime它似乎未实现或其他东西。