6

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

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

有没有人有更好的主意?

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

4

6 回答 6

22

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

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

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

于 2010-05-07T08:44:13.383 回答
1

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

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

有关更多信息,请参阅您链接到的页面上的“标准格式字符串如何工作”部分。

于 2010-05-07T08:44:30.263 回答
1

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

var date = DateTime.Now;
var ci = new CultureInfo("de-CH");
var output = date.ToString("d MMM", ci);
于 2015-10-08T09:06:04.353 回答
0

编辑:使用date.ToString("d MMM"). 它将显示9 月 7 日

于 2010-05-07T08:39:29.383 回答
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')。

于 2013-08-27T21:48:59.417 回答
-1

快速,简单,完成工作。

CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(Month).Substring(0,3);
于 2015-01-17T05:58:45.277 回答