views:

59

answers:

3

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

A: 

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

SergeanT
He actually wants the shortened version, so it should be date.ToString("d MMM")
Matt Warren
+4  A: 

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.

Jon Skeet
+1  A: 

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.

Matt Warren
@Matt: That won't give a locale-dependent ordering though: "The reason I would use MonthDay is that the ordering of month and date is locale dependent."
Jon Skeet
@Jon yeah good point, I missed that bit.
Matt Warren