.net – String.Format (format,date) is ignoring format


Not sure what's going on here.

I have a DateTime object, and when I try:

String.Format( "{0:dd/MM/yyyy}", _date)

the value returned is:


What I want is


Can anyone explain why my format string is being ignored?

A bit more background:
This is a web app which started out life as .net 1.1, and I'm in the process of moving it up to 2.0/3.5.


If I change the format to {0:dd:MM:yyyy}, it returns 24:05:1967 – it's only the / in the format string that gets changed to the – char.


When updating the app to run under 2.0, the asp.net globalization settings were messed up.

From the web site properties, ASP.NET tab, Edit Configuration, Application Tab – the culture and UI Culture were both set to the first item in the list (af-ZA) for some bizarre reason.

Best Answer

The / is actually the date separator for your specific culture which could be -, in other words, the format string is not ignored but actually used correctly. Look at what CultureInfo is associated with the running thread:


If you try this:

String.Format(new CultureInfo("en-US"), "{0:dd/MM/yyyy}", DateTime.Now);

You will get the date formatted with / since that is the correct separator for en-US. What you probably should do is use the short date format string and make sure that the thread has the appropriate culture associated, then this would get you what you want and it will work in a globalized application as well:

DateTime.Now.ToString("d", Thread.CurrentThread.CurrentCulture);

Hope this helps!