Преобразование чисел из западных арабских цифр "1,2,3..." в восточные арабские цифры " ١, ٢, ٣…"
Мне нужно преобразовать дату, хранящуюся в базе данных, в хиджру и отобразить ее на арабском языке
Я использовал культуру для преобразования даты, которую она делает, но она по-прежнему отображает дату как английские числа
пример Грегорианское = 19/01/2012 Его эквивалентная дата в Хирджи-25/02/1433
следующий фрагмент кода преобразуется, но отображается так же, как 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#
5 ответов
свойство 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));
и все будет работать просто отлично. Кстати, код для функция была взята из здесь.
вы должны преобразовать 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();
}
строка результата будет чем-то вроде '٢٥/٠٢/٢٠١٢'
вам нужно будет установить страницу региональные параметры пользовательского интерфейса на арабский язык
Я использую 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