2009-07-16 17 views
8

Je modifie une application Web globalisée qui utilise CultureInfo stockée pour chaque utilisateur connecté.CultureInfo & DateTimeInfo: Comment vérifier si l'heure est de 24 heures?

Le client souhaite que la saisie des données temporelles soit localisée. L'affichage n'est pas un problème car le formatage est déjà disponible. Cependant, j'ai besoin de détecter si l'information culturelle actuelle est pour 24 heures ou am/pm afin que je puisse afficher les bonnes boîtes de saisie (pas seulement un champ de texte).

Mon idée initiale était de vérifier la propriété DateTimeInfo de CultureInfo et de voir si le ShortTimePattern contenait un H majuscule ou un minuscule h mais cela ne me semblait pas assez robuste pour moi.

Y a-t-il un meilleur moyen? J'ai lu les propriétés de classe des deux, mais à moins de manquer quelque chose, je ne vois aucune méthode ou propriété existante.

+0

Merci @mlessard - La vérification d'un caractère échappé est une bonne idée. Je ne vais probablement pas le faire à ce stade car nous n'utilisons pas de cultures personnalisées, tout cela est assez simple. – toxaq

+0

Voici le code que j'ai utilisé pour créer cette fonctionnalité en tant que méthode d'extension: using System; en utilisant System.Globalization; My.Extensions d'espace de noms { de CultureInfoExtensions public static class {public static bool Is24HourTime (cette culture CultureInfo) { culture.DateTimeFormat.ShortTimePattern.Contains de retour ("H"); } } } – toxaq

Répondre

7

Je ne pense pas qu'il existe un meilleur moyen d'obtenir cette information. Le modèle temporel d'une culture peut contenir n'importe quoi (un utilisateur peut même créer une culture personnalisée où le ShortTimePattern est "\ hello", puis DateTime.ToString() retournera "bonjour" à tout moment). Dans ce cas, comment le cadre pourrait-il déterminer si CultureInfo est au format 24 heures ou 12 heures?

Ainsi, un "normal" DateTimeFormatInfo.ShortTimePattern contiendra nécessairement un "h" ou un "H", sinon l'heure ne sera pas affichée. Je pense que vous pouvez suivre votre idée initiale et vérifier cela. Vous pouvez également vérifier que le 'h' ou 'H' n'est pas échappé avec un \ like dans mon exemple "\ hello" parce que cela ne représenterait pas l'heure :)

5

Le moyen le plus robuste est de vérifier si DateTimeFormatInfo.AMDesignator est une chaîne vide.

if (DateTimeFormatInfo.AMDesignator == "") 
    //24hour format 
else 
    //12hour format 
+0

C'est 'DateTimeFormatInfo.CurrentInfo.AMDesignator' mais exactement ce dont j'ai besoin – Anytoe

2

La vérification de 'H'/'h' semble plus robuste que la vérification de l'indicateur AM/PM. Un bon exemple est en-gb: La chaîne de format d'heure est HH: mm et les désignateurs AM/PM sont réglés sur AM/PM Windows affichera l'heure au format 24h! Cela semble être une définition incohérente mais la vérification de 'H' a corrigé mon bogue.