как записать первую букву даты и месяца в верхний регистр ToLongDateString() в результате es-mx Culture?

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

Вопрос

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

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

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

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

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

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

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

Это было полезно?

Решение

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

то есть

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

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

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

Другие советы

Шаблон LongDate для испанского языка (Мексика) -

  

dddd, dd 'de' MMMM 'de' yyyy

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

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

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

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

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


    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top