Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CultureInfo & DateTimeInfo: How to check if is 24 hour time?

I'm modifying a globalized web application which uses stored CultureInfo for each logged in user.

The client would like time data entry to be localized. Displaying is not a problem as the formatting is already available. However I need to detect if the current cultureinfo is for 24 hour time or am/pm so I can display the correct input boxes (not just a textfield).

My initial idea was to check the DateTimeInfo property of CultureInfo and see if the ShortTimePattern contained a capital H or a lower case h but this didn't feel robust enough for me.

Is there a better way? I've read the class properties of both but unless I'm missing something, I can't see any existing methods or properties.

like image 624
toxaq Avatar asked Jul 16 '09 01:07

toxaq


3 Answers

The most robust way is to check if DateTimeFormatInfo.AMDesignator is an empty string.

if (DateTimeFormatInfo.CurrentInfo.AMDesignator == "")
  //24hour format
else
  //12hour format
like image 194
jgauffin Avatar answered Nov 11 '22 17:11

jgauffin


Checking for 'H'/'h' seems more robust than checking for the AM/PM Designator. A good example is en-gb: The time format string is HH:mm and the AM/PM designators are set to AM/PM Windows will display the time in 24h format! This seems to be an inconsistent definition but checking for 'H' fixed my bug.

like image 20
DirkOdb Avatar answered Nov 11 '22 15:11

DirkOdb


I don't think there is a better way to obtain that information. The time pattern for a culture could contain anything (a user could even create a custom culture where the ShortTimePattern is "\hello" and then DateTime.ToString() would return "hello" for any time). In that case how could the framework determine if that CultureInfo is in 24-hour or 12-hour format?

So a "normal" DateTimeFormatInfo.ShortTimePattern will necessarily contain either a 'h' or a 'H', otherwise the hour will not be displayed. I think you can follow your initial idea and check for that. You can also check that the 'h' or 'H' is not escaped with a \ like in my "\hello" example because that would not represent the hour :)

like image 36
mlessard Avatar answered Nov 11 '22 15:11

mlessard