如何将日期格式化为本地化的Short MonthDay字符串

时间:2010-05-07 08:37:07

标签: c# .net datetime-format

我想将DateTime格式化为一个字符串,其中包含缩写的月份名称和图表中轴标签的使用日期。

默认的DateTime格式字符串不包含缩写月份。我想没有标准,但我可以采用月份名称的前3个字符的子字符串,并将其替换为MonthDay格式。我使用MonthDay的原因是月份和日期的顺序取决于语言环境。

有没有人有更好的主意?

http://msdn.microsoft.com/en-us/library/az4se3k1.aspx#MonthDay

6 个答案:

答案 0 :(得分:17)

您可以采用MonthDay模式并将“MMMM”替换为“MMM” - 然后应用该模式:

string pattern = CultureInfo.CurrentCulture.DateTimeFormat.MonthDayPattern;
pattern = pattern.Replace("MMMM", "MMM");
string formatted = dateTime.ToString(pattern);

这有些粗糙,但我相信它会起作用。

答案 1 :(得分:1)

您可以使用自定义字符串格式化程序执行此操作:

DateTime now = DateTime.Now;
Console.WriteLine("{0}", now.ToString("ddd MMMM dd"));

有关详细信息,请参阅您链接到的页面上的“标准格式字符串的工作原理”部分。

答案 2 :(得分:0)

已编辑:使用date.ToString("d MMM")。它将显示 7 sep

答案 3 :(得分:0)

以下是我想出的类似需要01/29本地化版本的解决方案:

Regex.Replace(c.DateTimeFormat.ShortDatePattern, @"(yy(yy)?[/\.\- ]|[/\.\- ]yy(yy)?)", "")

以下是所有文化的格式输出,因此您可以查看它是否适合您:

CultureInfo.GetCultures(CultureTypes.AllCultures)
    .Select(c => new {
        c.Name,
        c.DateTimeFormat.MonthDayPattern,
        c.DateTimeFormat.ShortDatePattern,
        DayMonth1 = Regex.Replace(c.DateTimeFormat.ShortDatePattern, @"[/\.\- ]?yy[/\.\- ]?", ""),
        DayMonth2 = Regex.Replace(c.DateTimeFormat.ShortDatePattern, @"(yyyy[/\.\- ]|[/\.\- ]yyyy|yy[/\.\- ]|[/\.\- ]yy)", ""),
        DayMonth3 = Regex.Replace(c.DateTimeFormat.ShortDatePattern, @"(yy(yy)?[/\.\- ]|[/\.\- ]yy(yy)?)", "")
    })
    .OrderBy(x => x.Name)
    .Dump();

DateMonth1替换将为一些文化删除额外的填充字符(特别是'bg')。

答案 4 :(得分:0)

您可以在Date.ToString()方法中传递CultureInfo。您可以使用特定的文化信息,也可以使用CultureInfo.CurrentCulture:

var date = DateTime.Now;
var ci = new CultureInfo("de-CH");
var output = date.ToString("d MMM", ci);

答案 5 :(得分:-1)

快速,轻松,完成工作。

CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(Month).Substring(0,3);