8

我需要将存储在数据库中的日期转换为回历并用阿拉伯语显示

我使用文化来转换它所做的日期,​​但它仍然将日期显示为英文数字

示例 公历日期 = 19/01/2012 它在 Hirji 中的等效日期是 25/02/1433

以下代码片段转换但显示与 1433 年 2 月 25 日相同虽然我希望它以阿拉伯数字显示,例如 ٢٥/٠٢/٢٠١٢"

string sDate    
DateTime dtt = Convert.ToDateTime("19/01/2012");
CultureInfo ci = new CultureInfo("ar-SA");
sDdate = dtt.ToString("d", ci);

是否将日期转换为回历并显示与阿拉伯语相同

我需要这个用于我在 ASP.NET c# 中开发的 Web 项目

4

5 回答 5

21

CultureInfo 类不会帮助您将数字解析或格式化为东部阿拉伯语(“٠”、“١”、“٢”、“٣”、“٤”、“٥”、“٦”、“٧”、 "٨", "٩") 也不是西阿拉伯语 ("0", "1", "2", "3", "4", "5", "6", "7", "8", " 9")。你必须手动转换它,这里有一个小函数,它会以一种简洁的方式为你做到这一点:

public string ConvertToEasternArabicNumerals(string input)
    {
        System.Text.UTF8Encoding utf8Encoder = new UTF8Encoding();
        System.Text.Decoder utf8Decoder = utf8Encoder.GetDecoder();
        System.Text.StringBuilder convertedChars = new System.Text.StringBuilder();
        char[] convertedChar = new char[1];
        byte[] bytes = new byte[] { 217, 160 };
        char[] inputCharArray = input.ToCharArray();
        foreach (char c in inputCharArray)
        {
            if (char.IsDigit(c))
            {
                bytes[1] = Convert.ToByte(160 + char.GetNumericValue(c));
                utf8Decoder.GetChars(bytes, 0, 2, convertedChar, 0);
                convertedChars.Append(convertedChar[0]);
            }
            else
            {
                convertedChars.Append(c);
            }
        }
        return convertedChars.ToString();
    }

现在稍微修改一下你的代码,如下所示:

string sDate    
DateTime dtt = Convert.ToDateTime("19/01/2012");
CultureInfo ci = new CultureInfo("ar-SA");
sDate = ConvertToEasternArabicNumerals(dtt.ToString("dd/MM/yyyy", ci));

一切都会好起来的。顺便说一句,函数的代码取自这里

于 2012-01-19T14:11:28.517 回答
5

您应该将 HijriDate 转换为字符串,假设它的名称是 stringHijriDate。然后使用如下函数将其数字转换为阿拉伯数字:

  public static string ToArabicNumber(this string inputString)
    {
        string[] arabicDigits = CultureInfo.GetCultureInfo("fa-IR").NumberFormat.NativeDigits;
        var arabicNumberBuilder = new StringBuilder();
        foreach (char c in inputString)
        {
            if (char.IsDigit(c))
                arabicNumberBuilder.Append(arabicDigits[int.Parse(c.ToString())]);
            else
                arabicNumberBuilder.Append(c);
        }
        return arabicNumberBuilder.ToString();
    }

结果字符串将类似于 '٢٥/٠٢/٢٠١٢'

于 2016-02-27T08:28:22.613 回答
1

我使用DigitSubstitution在印地语(有时称为阿拉伯语)数字和英语数字之间切换:

bool UseHindiNumbers;
//...
if (UseHindiNumbers)
  Thread.CurrentThread.CurrentCulture.NumberFormat.DigitSubstitution = DigitShapes.NativeNational;
else
  Thread.CurrentThread.CurrentCulture.NumberFormat.DigitSubstitution = DigitShapes.None;
于 2013-10-14T20:37:30.927 回答
0

您需要将页面的UI 文化设置为阿拉伯语

于 2012-01-19T13:43:40.697 回答
0
Private Function DigitContext(ByVal Vl As String) As String
    Dim ks As String
    Dim c As Integer
    Dim t As Integer
    ks = "" 'reset the returned string
    For t = 1 To Vl.Length
        c = AscW(Vl.Substring(t - 1, 1))
        Select Case c
            Case &H30 To &H39
                ks = ks & ChrW(c + &H630)
            Case 46
                ks = ks & ChrW(1548) '&H060C 'ks = ks & ","
            Case Else
                ks = ks & Mid(Vl, t, 1)
        End Select
    Next
    Return ks

End Function
于 2013-12-25T23:21:56.460 回答