C# 如何在es mx区域性中使用ToLongDateString()的大写日期和月份首字母?

C# 如何在es mx区域性中使用ToLongDateString()的大写日期和月份首字母?,c#,.net,datetime,internationalization,culture,C#,.net,Datetime,Internationalization,Culture,目前,我在es MX区域性中从以下C#行代码中获得以下结果 Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = new CultureInfo("es-mx"); <span><%=DateTime.Now.ToLongDateString()%></span> Thread.CurrentThread

目前,我在es MX区域性中从以下C#行代码中获得以下结果

   Thread.CurrentThread.CurrentCulture =
     Thread.CurrentThread.CurrentUICulture = new
                CultureInfo("es-mx");

  <span><%=DateTime.Now.ToLongDateString()%></span>
Thread.CurrentThread.CurrentCulture=
Thread.CurrentThread.CurrentUICulture=新建
文化信息(“es mx”);
米尔科勒,2008年8月22日 我想获得以下信息

米尔科勒,2008年8月22日
我需要建立自己的文化吗?

西班牙(墨西哥)的长日期模式是

dddd,dd'de'MMMM'de'yyyy


根据。我想你只需要手动将日期和月份的首字母转换为大写,或者你可以使用,然后用“De”替换“De”。

你不需要建立自己的文化。您只需更改当前区域性中的属性DateTimeFormat.DayNames和DateTimeFormat.MonthNames

i、 e


然而,很奇怪的是,en-US用第一个大写字母表示月份和天数,而mx-ES则没有


希望有帮助

前两个解决方案很好,但如果我们想将其扩展到任何文化,该怎么办?因此我提出了这种方法,将当前文化日期时间数组更改为TitleCase

private void SetDateTimeFormatNames()
        {

            Thread.CurrentThread.CurrentCulture.DateTimeFormat.DayNames = ConvertoToTitleCase(Thread.CurrentThread.CurrentCulture.DateTimeFormat.DayNames);
            Thread.CurrentThread.CurrentCulture.DateTimeFormat.MonthNames = ConvertoToTitleCase(Thread.CurrentThread.CurrentCulture.DateTimeFormat.MonthNames);

        }

private string[] ConvertoToTitleCase(string[] arrayToConvert)
            {
                for (int i = 0; i < arrayToConvert.Length; i++)
                {
                    arrayToConvert[i] = Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(arrayToConvert[i]);
                }

                return arrayToConvert;
            }
private void SetDateTimeFormatNames()
{
Thread.CurrentThread.CurrentCulture.DateTimeFormat.DayNames=ConvertToTitlecase(Thread.CurrentThread.CurrentCulture.DateTimeFormat.DayNames);
Thread.CurrentThread.CurrentCulture.DateTimeFormat.MonthNames=ConvertToTitlecase(Thread.CurrentThread.CurrentCulture.DateTimeFormat.MonthNames);
}
私有字符串[]ConvertToTitleCase(字符串[]arrayToConvert)
{
for(int i=0;i

如何在不进行循环的情况下改进此功能?

有点晚了,但这对我来说很有效

 public static string GetFecha()
    {
        System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo("es-EC");
        System.Threading.Thread.CurrentThread.CurrentCulture = culture;

        // maldita sea!
        string strDate = culture.TextInfo.ToTitleCase(DateTime.Now.ToLongDateString());

        return strDate.Replace("De", "de");


    }

这不是一个很好的方法,因为它需要对翻译有深入的了解。但你会如何以文化无关的方式来处理呢?“很奇怪,en-US用第一个大写字母表示月份和天数,而对于mx-ES则不是”-不太可能,每个字母都遵循其语言的语法规则。在西班牙语中,日和月的名称使用小写。嘿,这是真的。我是墨西哥人,我不知道正确的方法是使用小写。在墨西哥,许多人使用书名大小写写,可能是因为受美国的影响。如果使用微软的翻译适合你,你可以使用
Thread.CurrentThread.CurrentCulture=new CultureInfo(“es”)使用es的问题在于墨西哥和西班牙的数字格式不同。您将得到逗号,而不是小数点的句点,小数点是您期望的逗号。有史以来最糟糕的函数名。西班牙式英语是邪恶的。
 public static string GetFecha()
    {
        System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo("es-EC");
        System.Threading.Thread.CurrentThread.CurrentCulture = culture;

        // maldita sea!
        string strDate = culture.TextInfo.ToTitleCase(DateTime.Now.ToLongDateString());

        return strDate.Replace("De", "de");


    }