8

データベースに保存されている日付をイスラム暦に変換し、アラビア語で表示する必要があります

カルチャを使用して日付を変換しましたが、それでも日付は英語の数値として表示されます

グレゴリオ暦の日付の例=2012年1月19日ヒルジでの同等の日付は1433年2月25日です。

次のコードスニペットは変換されますが、25/02/1433と同じように表示されます。アラビア数字で表示したいのですが、٢٥ / ٠٢ / ٢٠١٢のようになります。

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 に答える