7

目前我在 es-MX Culture 中从以下 C# 代码行获得以下结果

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

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

miércoles,2008 年 10 月 22 日

我想获得以下

Miércoles,2008 年 10 月 22 日

我需要建立自己的文化吗?

4

5 回答 5

10

你不需要建立自己的文化。您只需要更改当前区域性中的属性 DateTimeFormat.DayNames 和 DateTimeFormat.MonthNames。

IE

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

然而,奇怪的是 en-US 以第一个大写字母显示月份和日期,而 mx-ES 则没有。

希望能帮助到你!。

于 2008-10-23T05:00:02.223 回答
1

西班牙语(墨西哥)的 LongDate 模式是

dddd, dd' de 'MMMM' de 'yyyy

根据Thread.CurrentThread.CurrentCulture.DateTimeFormat.LongDatePattern。我想您只需手动将日期和月份的首字母转换为大写,或者您可以使用Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase然后将“De”替换为“de”。

于 2008-10-23T04:50:11.310 回答
0

前两个解决方案工作正常,但如果我们想将其扩展到任何文化怎么办,所以我想出了这种方法,我将当前文化日期时间数组更改为 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;
            }

如果没有循环,如何改进?

于 2008-10-23T05:38:50.430 回答
0

有点晚了,但这对我有用!

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


    }
于 2010-03-30T03:03:37.233 回答
0

不变文化的自定义长日期格式字符串是“dddd, dd MMMM yyyy”,所以可以使用string.Format和处理大写的方法:

private string GetDateFormated(DateTime date)
{
    return string.Format("{0}, {1} {2} {3}",
        ToTitleCase(date.ToString("dddd")),
        date.ToString("dd"),
        ToTitleCase(date.ToString("MMMM")),
        date.ToString("yyyy"));
}

private string ToTitleCase(string input)
{
    return input[0].ToString().ToUpper() + input.Substring(1);
}

参考:长日期(“D”)格式说明符

于 2022-01-07T20:20:52.097 回答