How to format a date as localized Short MonthDay string

拥有回忆 提交于 2019-12-06 04:54:33

问题


I would like to format a DateTime to a string containing the month name abbreviated and the date for use in axis labels in a graph.

The default DateTime format strings do not contain abbreviated month. I guess there is no standard but I could take a substring of the first 3 characters of the month name and replace this into the MonthDay format. The reason I would use MonthDay is that the ordering of month and date is locale dependent.

Does anyone have a better idea?

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


回答1:


You could take the MonthDay pattern and replace "MMMM" with "MMM" - then apply that pattern:

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

It's somewhat crude, but I believe it would work.




回答2:


You can use the custom string formatters to do this:

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

See the section "How Standard Format Strings Work" on the page you linked to for more info.




回答3:


You can pass a CultureInfo in the Date.ToString() method. Either you have a specific culture info or you can use the CultureInfo.CurrentCulture:

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



回答4:


Edited: Use date.ToString("d MMM"). It will show 7 sep.




回答5:


Here is the solution I came up with for the similar situation of wanting a localized version of 01/29:

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

Here is the format output for all cultures, so you can see if it will work for you:

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();

The DateMonth1 replace will remove an extra padding character for a couple cultures (specifically 'bg').




回答6:


Quick, easy and does the job.

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


来源:https://stackoverflow.com/questions/2787235/how-to-format-a-date-as-localized-short-monthday-string

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!