Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#将DateTime.Now转换为带阿拉伯数字的阿拉伯月份_C#_Datetime - Fatal编程技术网

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

C#将DateTime.Now转换为带阿拉伯数字的阿拉伯月份,c#,datetime,C#,Datetime,我在回答我的问题,并提供案例。。。 我的规格,我需要这样的日期 我试过了 上述问题未按预期解决, 或者它没有正确地更改月份,例如用英语显示月份 年份是用英文数字表示的,例如用英文数字表示年份 这浪费了我的时间。。。有什么代码可以解决我的问题吗?首先,我是C#初学者,所以如果有对代码的编辑,请继续并优化它 通过阅读和尝试代码,(顺便说一句,这里和那里都有非常老的帖子!) 在提到 我开始更清楚地理解这个问题 案例1 当我使用下线时,我得到了1441محم24 DateTime.Now

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

我试过了

上述问题未按预期解决,

  • 或者它没有正确地更改月份,例如用英语显示月份
  • 年份是用英文数字表示的,例如用英文数字表示年份
  • 这浪费了我的时间。。。有什么代码可以解决我的问题吗?

    首先,我是C#初学者,所以如果有对代码的编辑,请继续并优化它

    通过阅读和尝试代码,(顺便说一句,这里和那里都有非常老的帖子!) 在提到

    我开始更清楚地理解这个问题

    案例1

    当我使用下线时,我得到了1441محم24

    DateTime.Now.ToString("yyyy MMMM dd", new System.Globalization.CultureInfo("ar-SA"))
    
    现在关注MMMMar 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")));
    

    我认为这是更好的处理方法,它可以使用日期格式,然后自定义格式的数字,它不能处理。从其他关于正确设置数字格式的答案中,直接访问数字更容易。但在这种情况下,我们可以直接使用所需的文化

        static void Main(string[] _)
        {
            DateTime dtm = new DateTime(2020, 1, 1, 0, 0, 0);
    
            var culture = new CultureInfo("ar-KW");
    
            var daymonth = dtm.ToString("dddd , MMMM, ", culture);
            var day = ToNativeNumberString(dtm.Day, 2, culture);
            var year = ToNativeNumberString(dtm.Year, 0, culture);
    
            var fulldate = $"{day}, {daymonth} {year}";
    
            Console.WriteLine(fulldate);
        }
    
        static string ToNativeNumberString(int number, int leftPadding, CultureInfo culture)
        {
            StringBuilder sb = new StringBuilder();
    
            while (number > 0)
            {
                var digit = number % 10;
    
                sb.Append(culture.NumberFormat.NativeDigits[digit]);
    
                number /= 10;
            }
    
            while (sb.Length < leftPadding)
            {
                sb.Insert(0, culture.NumberFormat.NativeDigits[0]);
            }
    
            return sb.ToString();
        }
    
    static void Main(字符串[])
    {
    DateTime dtm=新的日期时间(2020,1,1,0,0,0);
    var culture=新的CultureInfo(“ar KW”);
    var daymount=dtm.ToString(“dddd,MMMM,”,培养基);
    var day=张力枚举字符串(dtm.day,2,培养);
    var year=色调枚举字符串(dtm.year,0,文化);
    var fulldate=$“{day},{daymount}{year}”;
    控制台写入线(完整日期);
    }
    静态字符串TonativeEnumberString(int-number、int-leftPadding、CultureInfo区域性)
    {
    StringBuilder sb=新的StringBuilder();
    而(数量>0)
    {
    变量位数=数字%10;
    某人附加(文化数字格式本地数字[数字]);
    数目/=10;
    }
    while(sb.Length
    您应该显示不起作用的问题代码,以及任何输入、预期输出、实际输出和错误/异常。@RufusL谢谢,正如我所说,
    上面的问题它没有按预期工作,要么没有正确更改月份,要么年份是英文数字等等。
    我尝试了参考中的所有代码,也许您可以更具体一些。什么是文化不变性价值,您想要什么,通过内置方法获得什么。全部由HTML或图片提供。您可以删除无用的引用和不必要的句子。包含正确的解决方案会更好。@Ucho这是正确的解决方案否!或者你是说你有更合适的?我的意思是剥离压舱物,只留下核心溶液。