C#将DateTime.Now转换为带有阿拉伯数字的阿拉伯月份

时间:2019-03-20 16:53:12

标签: c# datetime

我正在回答我的问题,并提供案例... 我的规范,我需要这样的日期

hijri date example

我尝试过

上述问题未能按预期运行,

  1. 它没有正确更改月份,例如用英语显示月份
  2. 年份为英文数字,​​例如以2019年英文数字显示年份

这浪费了我的时间...周围的任何代码都可以解决我的问题?

2 个答案:

答案 0 :(得分:0)

我认为最好通过使用日期格式来实现此功能,然后自定义其无法处理的数字格式来更好地处理。从其他有关正确格式化数字的答案中,直接访问数字更加容易。但是在这种情况下,我们可以直接使用所需的文化。

Predicate

答案 1 :(得分:-1)

首先,我是C#入门者,因此,如果对代码进行了编辑,请张贴并进行优化。

通过阅读并尝试代码,(顺便说一句,很老的帖子在这里和那里!) 在提到 عرض الوقت والتاريخين الهجري والميلادي في برنامجك سي شارب

我开始更清楚地阅读问题,

案例1

在行下使用时,我得到 1441محرم24

DateTime.Now.ToString("yyyy MMMM dd", new System.Globalization.CultureInfo("ar-SA"))

现在要密切注意 MMMM ar-SA ,以显示称为محرم的月份。

问题出在这里,您会用英语获得 1441

所以

案例2

为了使这一行更进一步,我使用了转换为阿拉伯数字的方法... 该代码应将任何数字更改为阿拉伯语/印地语字符集...

public static 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();
        }

组合代码:

DateHelper.ConvertToEasternArabicNumerals(DateTime.Now.ToString("yyyy MMMM dd", new System.Globalization.CultureInfo("ar-SA")));