views:

800

answers:

2

For the following code, I would expect result to equal 2, because the MSDN states that 'd' "Represents the day of the month as a number from 1 through 31. A single-digit day is formatted without a leading zero.".

DateTime myDate = new DateTime( 2009, 6, 4 );
string result = myDate.ToString( "d" );

However, result is actually equal to '6/4/2009' - which is the short-date format (which is also 'd'). I could use 'dd', but that adds a leading zero, which I don't want.

+1  A: 

To indicate that this is a custom format specifier (in contrast to a standard format specifier), it must be two characters long. This can be accomplished by adding a space (which will show up in the output), or by including a percent sign before the single letter, like this: string result = myDate.ToString( "%d" ). MSDN

Marcel Lamothe
+1  A: 

Rather than using string formatting strings, how about using the Day property

DateTime myDate = new DateTime(2009,6,4)
int result = myDate.Day;

Or if you really needed the result in string format

string result = myDate.Day.ToString();

If you are looking to get a specific date part out of a date object rather than a formatted representation of the date, I prefer to use the properties (Day, Month, Year, DayOfWeek, etc.) It makes reading the code a bit easier (particularly if someone else is reading/maintaining it that doesn't have the various formatting codes memorized)

James Conigliaro
Thanks, you make a good point. Unfortunately in my case today I needed to put the format string in a property sheet as part of a report layout - so I had to use the %d value.
Marcel Lamothe