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

时间:2014-04-28 15:08:47

标签: c# .net date datetime internationalization

在我的应用程序中,我使用了一种友好的短日期格式。对于en-GB语言环境,这是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'有些人使用' M'在ShortDatePattern中。而且我不认为我可以可靠地用" &#34 ;.或者我可以吗?

有什么建议吗?也许最好从LongDateTime格式开始并将其剥离下来?

2 个答案:

答案 0 :(得分:0)

像你一样采取文化

var culture = System.Globalization.CultureInfo.CurrentCulture;

然后使用Custom Date Formatthis DateTime.ToString重载来格式化

date.ToString("d MMMM yyyy", culture);

Proof(但它会爆炸,因为小提琴的记忆力有限)。


如果您希望显示的日期是用户友好的(订单和分隔符),那么您宁愿避免使用除ShortDatePattern提供之外的任何其他内容。您可以尝试将"M""MM"替换为"MMMM",但是谁告诉您它仍然用户友好呢?

也许你可以使用MonthDayPattern作为John Skeet suggested(但仍然不推荐),只是以某种方式表示年份(在那之后的括号中)。

答案 1 :(得分:0)

如果要包括星期几的缩写,请从长格式开始,然后将其星期几和月份的占位符转换为短格式:

SELECT Players.userName AS Player, 
     Teams.TeamName AS [Team Name]
FROM Teams
    INNER JOIN Players
        ON Team.ID = Players.[TeamName_]