用缩写的月份名称显示区域设置感知日期的最佳方式

本文关键字:感知 设置 日期 最佳 方式 区域 缩写 显示 | 更新日期: 2023-09-27 18:00:37

在我的应用程序中,我使用了一种友好的短日期格式。对于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,并简单地以某种方式指示年份(在后面的括号中?)。