如何大写日期和月份ToLongDateString()的第一个字母导致es-mx文化?

时间:2008-10-23 04:35:38

标签: c# .net datetime internationalization culture

目前我在es-MX Culture

中使用以下C#代码行获得以下结果
   Thread.CurrentThread.CurrentCulture =
     Thread.CurrentThread.CurrentUICulture = new
                CultureInfo("es-mx");

  <span><%=DateTime.Now.ToLongDateString()%></span>

miércoles,22 de octubre de 2008

我想获得以下

Miércoles,22 de Octubre de 2008

我需要建立自己的文化吗?

4 个答案:

答案 0 :(得分:8)

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

        string[] newNames = { "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado", "Domingo" };
        Thread.CurrentThread.CurrentCulture.DateTimeFormat.DayNames = newNames;

然而,很奇怪en-US用第一个大写字母和mx-ES显示数月和数天。

希望它有所帮助!

答案 1 :(得分:1)

西班牙语(墨西哥)的LongDate模式是

  

dddd, dd' de 'MMMM' de 'yyyy

根据Thread.CurrentThread.CurrentCulture.DateTimeFormat.LongDatePattern。我想您只需手动将当天和月份的首字母转换为大写字母,或者您可以使用Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase然后将“De”替换为“de”。

答案 2 :(得分:0)

前两个解决方案工作正常,但如果我们想将其扩展到任何文化,那么我想出了这种方法我将当前的文化日期时间数组更改为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;
            }

如何通过循环来改善这一点?

答案 3 :(得分:0)

有点晚了,但这对我有用!

 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");


    }