C#将DateTime.Now转换为带阿拉伯数字的阿拉伯月份
我在回答我的问题,并提供案例。。。 我的规格,我需要这样的日期 我试过了C#将DateTime.Now转换为带阿拉伯数字的阿拉伯月份,c#,datetime,C#,Datetime,我在回答我的问题,并提供案例。。。 我的规格,我需要这样的日期 我试过了 上述问题未按预期解决, 或者它没有正确地更改月份,例如用英语显示月份 年份是用英文数字表示的,例如用英文数字表示年份 这浪费了我的时间。。。有什么代码可以解决我的问题吗?首先,我是C#初学者,所以如果有对代码的编辑,请继续并优化它 通过阅读和尝试代码,(顺便说一句,这里和那里都有非常老的帖子!) 在提到 我开始更清楚地理解这个问题 案例1 当我使用下线时,我得到了1441محم24 DateTime.Now
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")));
我认为这是更好的处理方法,它可以使用日期格式,然后自定义格式的数字,它不能处理。从其他关于正确设置数字格式的答案中,直接访问数字更容易。但在这种情况下,我们可以直接使用所需的文化
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这是正确的解决方案否!或者你是说你有更合适的?我的意思是剥离压舱物,只留下核心溶液。