将西方阿拉伯数字“1,2,3 ……”中的数字转换为东部阿拉伯数字“1,2,3 ……”

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

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

示例Gregorian Date = 19/01/2012它在Hirji的等效日期是25/02/1433

以下代码段转换但显示与25/02/1433相同虽然我想要它的阿拉伯数字像25/02/2012“

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

有没有它将日期转换为Hijri并显示与阿拉伯语相同

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

CultureInfo类无法帮助您解析或格式化数字到东阿拉伯语(“0”,“1”,“2”,“3”,“4”,“5”,“6”,“7”, “8”,“9”)也不是西方阿拉伯语(“0”,“1”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“ 9″ )。 你必须手动转换它,这是一个小function,它会以一种巧妙的方式为你做到这一点:

 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)); 

事情会好起来的。 顺便说一句,该function的代码来自这里 。

你应该将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(); } 

结果字符串将类似’25 / 02/2012′

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

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

 bool UseHindiNumbers; //... if (UseHindiNumbers) Thread.CurrentThread.CurrentCulture.NumberFormat.DigitSubstitution = DigitShapes.NativeNational; else Thread.CurrentThread.CurrentCulture.NumberFormat.DigitSubstitution = DigitShapes.None; 
 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