как в верхнем регистре даты и месяца первая буква ToLongDateString () приведет к es-mx Культура? - PullRequest
6 голосов
/ 23 октября 2008

в настоящее время я получаю приведенный ниже результат из следующей строки кода C # в es-MX Culture

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

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

миров, 22 октября 2008

Я хотел бы получить следующее

Мирколес, 22 октября 2008

мне нужно построить свою собственную культуру?

Ответы [ 4 ]

8 голосов
/ 23 октября 2008

Вам не нужно создавать свою собственную культуру. Вам нужно только изменить свойства DateTimeFormat.DayNames и DateTimeFormat.MonthNames в текущей культуре.

т.е.

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

Однако странно, что en-US показывают месяцы и дни с первой заглавной буквой, а для mx-ES - нет.

Надеюсь, это поможет!

1 голос
/ 23 октября 2008

Шаблон LongDate для испанского (Мексика) составляет

dddd, dd' de 'MMMM' de 'yyyy

в соответствии с Thread.CurrentThread.CurrentCulture.DateTimeFormat.LongDatePattern . Я думаю, вам просто нужно вручную преобразовать начальные буквы дня и месяца в верхний регистр или вы можете использовать Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase , а затем заменить «De» на «de».

0 голосов
/ 30 марта 2010

немного поздно, но эта работа для меня!

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


    }
0 голосов
/ 23 октября 2008

первые два решения работают нормально, но что, если мы хотели бы расширить это на любую культуру, чтобы я придумал этот подход, я изменил бы текущие массивы даты и времени культуры на 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;
            }

как это можно улучшить без петли?

...