如何将 ToLongDateString() 的日期和月份首字母大写导致 es-mx 文化?
Posted
技术标签:
【中文标题】如何将 ToLongDateString() 的日期和月份首字母大写导致 es-mx 文化?【英文标题】:how to uppercase date and month first letter of ToLongDateString() result in es-mx Culture? 【发布时间】:2008-10-23 04:35:38 【问题描述】:目前我在 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 日
我需要建立自己的文化吗?
【问题讨论】:
【参考方案1】:您不需要建立自己的文化。您只需要更改当前文化中的属性 DateTimeFormat.DayNames 和 DateTimeFormat.MonthNames。
即
string[] newNames = "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado", "Domingo" ;
Thread.CurrentThread.CurrentCulture.DateTimeFormat.DayNames = newNames;
但是,奇怪的是 en-US 以第一个大写字母显示月份和日期,而 mx-ES 则没有。
希望对你有帮助!
【讨论】:
“奇怪的是,en-US 以第一个大写字母显示月份和日期,而 mx-ES 则没有” - 并非如此,每个都遵循其语言的语法规则。在西班牙语中,日期和月份名称使用小写。 嘿,这是真的。我是墨西哥人,我不知道正确的方法是使用小写字母。在墨西哥,许多人使用标题大小写写月份和日期,可能是因为美国的影响 如果你可以使用微软的翻译,你可以使用Thread.CurrentThread.CurrentCulture = new CultureInfo("es-ES");
使用 es-ES 的问题是墨西哥和西班牙的数字格式不同。你会得到逗号而不是小数点,以及你期望逗号的小数点。【参考方案2】:
西班牙语(墨西哥)的 LongDate 模式是
dddd, dd' de 'MMMM' de 'yyyy
根据Thread.CurrentThread.CurrentCulture.DateTimeFormat.LongDatePattern。我想您只需手动将日期和月份的首字母转换为大写,或者您可以使用Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase,然后将“De”替换为“de”。
【讨论】:
这不是一个好方法,因为它需要深入了解翻译知识。 是的,我的错。但是,您将如何以文化不可知论的方式处理?【参考方案3】:前两个解决方案工作正常,但如果我们想将其扩展到任何文化怎么办,所以我想出了这种方法,我将当前文化日期时间数组更改为 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;
如果没有循环,如何改进?
【讨论】:
【参考方案4】:有点晚了,但这对我有用!
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");
【讨论】:
有史以来最糟糕的函数名称。西班牙语是邪恶的。【参考方案5】:不变量文化的自定义长日期格式字符串是“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);
参考:The long date ("D") format specifier
【讨论】:
以上是关于如何将 ToLongDateString() 的日期和月份首字母大写导致 es-mx 文化?的主要内容,如果未能解决你的问题,请参考以下文章