我需要将存储在数据库中的日期转换为Hijri并在阿拉伯语中显示相同的
我使用文化来转换日期,但它仍然显示日期为英文数字
实施例 格里高利日期= 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项目答案 0 :(得分:19)
CultureInfo类无法帮助您解析或格式化数字到东阿拉伯语(“0”,“1”,“2”,“3”,“4”,“5”,“6”,“ 7“,”8“,”9“)也不是西方阿拉伯语(”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));
事情会好起来的。 顺便说一句,该函数的代码取自here。
答案 1 :(得分: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();
}
结果字符串将类似于'25 / 02/2012'
答案 2 :(得分:0)
您需要将页面的UI culture设置为阿拉伯语
答案 3 :(得分:0)
我使用 DigitSubstitution 来切换印地语(有时称为阿拉伯语)数字和英文数字:
bool UseHindiNumbers;
//...
if (UseHindiNumbers)
Thread.CurrentThread.CurrentCulture.NumberFormat.DigitSubstitution = DigitShapes.NativeNational;
else
Thread.CurrentThread.CurrentCulture.NumberFormat.DigitSubstitution = DigitShapes.None;
答案 4 :(得分: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