как записать первую букву даты и месяца в верхний регистр ToLongDateString() в результате es-mx Culture?
-
04-07-2019 - |
Вопрос
в настоящее время я получаю приведенный ниже результат из следующей строки кода 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");
}