.ToShortDateString returning different cultural format than expected

Tony picture Tony · Oct 9, 2014 · Viewed 35.5k times · Source

Here's a weird one for you.

We've got a c# interface that's been running since the beginning of the year without problem on a windows XP (32bit) PC. We've just upgraded the PC to windows 7 (64bit) with apps installed by SCCM.

With the latest run the dates in the text area have started appearing in US format (5/2/2014) instead of UK format (02/05/2014).

The code that is being used is:

string Lines = FromFormat.Text + " from " + FromFormat.Charge_From.ToShortDateString() + " to " + FromFormat.Charge_To.ToShortDateString() +".";

Where FromFormat is an object with the source data, Charge_From & Charge_To are DataTime variables.

We've checked the PC's regional settings and created a little test app to display the pc's settings from .Net both of these are set as UK formats Code for test app:

label1.Text = DateTime.Now.ToString();
label2.Text = DateTime.Now.ToString("dd MMM yyyy");
label3.Text = DateTime.Now.ToShortDateString();
label4.Text = Thread.CurrentThread.CurrentCulture.EnglishName;

I know that I can replace the ToShortDateString() with a ToString("dd/MM/yyyy") to force the correct format but my question is why is this happening?

Is it something to do with the windows 7 upgrade? or the SCCM?

Thanks in advance

Answer

Soner Gönül picture Soner Gönül · Oct 9, 2014

ToShortDateString method uses ShortDatePattern property which is identical of "d" standard date and time format of your CurrentCulture.

en-GB culture's ShortDatePattern property is dd/MM/yyyy.

But en-US culture's ShortDatePattern property is M/d/yyyy.

That's why you can't always replace with ToShortDateString and ToString("dd/MM/yyyy"). They are not always the same. And "/" Custom Format Specifier has a special meaning as replace me with the current culture or specified culture's date separator.

I suspect your regional settings changed on your upgrade process and that's why ToShortDateString method generates different results.

But since you didn't tell us your CurrentCulture, we never know what the real problem is..