在我的应用程序中,我使用了一种友好的短日期格式。对于en-GB区域设置,这是"d MMM yyyy",即2014年6月1日。
如何生成一个使用缩写月份格式的区域设置感知格式,从而对任何区域设置都友好(由CurrentCulture设置)?
我想的是这样的:
System.Globalization.CultureInfo cI = System.Globalization.CultureInfo.CurrentCulture;
string niceFormat = cI.DateTimeFormat.ShortDatePattern.Replace("MM","MMM").Replace("dd","d").Replace(cI.DateTimeFormat.DateSeparator," ");
但是,并不是每个区域设置都有"MM",有些区域设置在ShortDatePattern中使用"M"。而且我认为我不能可靠地用"代替分隔符。或者我可以吗?
有什么建议吗?也许从LongDateTime格式开始并去掉它会更好?
如果您想包含一个缩写的星期几,请从一个长模式开始,并将其星期几和月份占位符转换为短格式:
var culture = CultureInfo.CurrentCulture;
string formattedDate = date.ToString(
culture.DateTimeFormat.LongDatePattern.Replace("dddd", "ddd").Replace("MMMM", "MMM"),
culture);
像对待一样对待文化
var culture = System.Globalization.CultureInfo.CurrentCulture;
然后使用自定义日期格式和该DateTime.ToString
过载对其进行格式化
date.ToString("d MMMM yyyy", culture);
证明(但它会爆炸,因为小提琴的记忆是有限的)。
如果您希望显示的日期是用户友好的(顺序和分隔符),那么您应该避免使用ShortDatePattern
提供的其他内容。你可以尝试用"MMMM"
替换"M"
或"MM"
,但谁告诉你它仍然是用户友好的?
也许你可以按照John Skeet的建议(但仍然不建议)使用MonthDayPattern
,并简单地以某种方式指示年份(在后面的括号中?)。