¿Cómo escribir en mayúsculas la primera letra de la fecha de ToLongDateString () en es-mx Culture?

StackOverflow https://stackoverflow.com/questions/228559

Pregunta

actualmente obtengo el siguiente resultado de la siguiente línea de código C # cuando estoy en es-MX Culture

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

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

mi & # 233; rcoles, 22 de octubre de 2008

me gustaría obtener lo siguiente

Mi & # 233; rcoles, 22 de Octubre de 2008

¿Necesito construir mi propia cultura?

¿Fue útil?

Solución

No necesitas construir tu propia cultura. Solo necesita cambiar la propiedad DateTimeFormat.DayNames y DateTimeFormat.MonthNames en la cultura actual.

es decir,

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

Sin embargo, es extraño que en los EE. UU. muestren meses y días con la primera letra mayúscula y para mx-ES no.

Espero que ayude.

Otros consejos

El patrón de LongDate para español (México) es

  

dddd, dd 'de' MMMM 'de' yyyy

de acuerdo a Thread.CurrentThread.CurrentCulture.DateTimeForm .LongDatePattern . Supongo que solo tiene que convertir manualmente las letras iniciales del día y el mes a mayúsculas o puede usar Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase y luego reemplaza " De " con " de " ;.

las dos primeras soluciones funcionan bien, pero, ¿qué tal si quisiéramos extender esto a cualquier cultura, por lo que se me ocurrió este enfoque?

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;
            }

¿Cómo se puede mejorar esto sin el Loop?

un poco tarde pero este trabajo para mí!

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


    }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top