Como a data e o mês da maiúsculas da primeira carta de tolongDateString () resultam em cultura ES-MX?

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

Pergunta

Atualmente, obtenho o resultado abaixo da seguinte linha de código C# quando estiver na cultura ES-MX

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

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

Miércoles, 22 De Ocultubre de 2008

Eu gostaria de obter o seguinte

Miércoles, 22 De Ocultubre de 2008

Eu preciso construir minha própria cultura?

Foi útil?

Solução

Você não precisa construir sua própria cultura. Você só precisa alterar a propriedade DateTimeFormat.DayNames e DateTimeFormat.monthNames na cultura atual.

ou seja

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

No entanto, é estranho que os in-EUA mostrem meses e dias com a primeira carta em alta e para o MX-es.

Espero que ajude!.

Outras dicas

O padrão de longdate para o espanhol (México) é

dddd, dd' de 'MMMM' de 'yyyy

de acordo com Thread.CurrentThread.CurrentCulture.DateTimeFormat.LongDatePattern. Eu acho que você só precisa converter manualmente as cartas iniciais do dia e mês para maiúsculas ou pode usar Thread.currentThread.currentculture.textinfo.totitleCase e depois substitua "de" por "de".

As duas primeiras soluções funcionam bem, mas e se gostarmos de estender isso a qualquer cultura, então eu criei essa abordagem, mudei as matrizes de hora de data atual da cultura em 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;
            }

Como isso pode ser melhorado sem o loop?

Um pouco tarde, mas este trabalho para mim!

 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top