2009-07-16 13 views
8

Sto modificando un'applicazione Web globalizzata che utilizza CultureInfo memorizzato per ogni utente connesso.CultureInfo e DateTimeInfo: come verificare se è 24 ore?

Il client desidera che l'inserimento dei dati orari sia localizzato. La visualizzazione non è un problema in quanto la formattazione è già disponibile. Tuttavia ho bisogno di rilevare se l'attuale culturainfo è per 24 ore o am/pm in modo da poter visualizzare le caselle di input corrette (non solo un campo di testo).

La mia idea iniziale era di controllare la proprietà DateTimeInfo di CultureInfo e vedere se il ShortTimePattern contenesse una H maiuscola o una minuscola h, ma questo non mi sembrava abbastanza robusto per me.

C'è un modo migliore? Ho letto le proprietà di classe di entrambi, ma a meno che manchi qualcosa, non riesco a vedere alcun metodo o proprietà esistente.

+0

Grazie @mlessard: il controllo di un personaggio in fuga è una buona idea. Probabilmente non lo farò in questa fase perché non stiamo usando culture personalizzate, è tutto molto semplice. – toxaq

+0

Questo è il codice che ho usato per creare questa funzionalità come metodo di estensione: usando System; utilizzando System.Globalization; namespace My.Extensions { CultureInfoExtensions classe public static { pubblico bool Is24HourTime statico (questa cultura CultureInfo) { culture.DateTimeFormat.ShortTimePattern.Contains di ritorno ("H"); } } } – toxaq

risposta

7

Non penso che ci sia un modo migliore per ottenere quell'informazione. Lo schema temporale per una cultura potrebbe contenere qualsiasi cosa (un utente potrebbe persino creare una cultura personalizzata in cui ShortTimePattern è "\ hello" e quindi DateTime.ToString() restituirà "ciao" per qualsiasi momento). In tal caso, in che modo il framework può determinare se CultureInfo è in formato 24 ore o 12 ore?

Quindi un "normale" DateTimeFormatInfo.ShortTimePattern conterrà necessariamente una "h" o una "H", altrimenti l'ora non verrà visualizzata. Penso che tu possa seguire la tua idea iniziale e controllarla. Puoi anche controllare che la 'h' o 'H' non sia sfuggita con un \ like nel mio esempio "\ ciao" perché non rappresenterebbe l'ora :)

5

Il modo più efficace è verificare se DateTimeFormatInfo.AMDesignator è una stringa vuota.

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

È 'DateTimeFormatInfo.CurrentInfo.AMDesignator' ma esattamente quello di cui ho bisogno – Anytoe

2

Il controllo di 'H'/'h' sembra più robusto del controllo per il designatore AM/PM. Un buon esempio è en-gb: La stringa del formato dell'ora è HH: mm ei designatori AM/PM sono impostati su AM/PM Windows visualizzerà l'ora nel formato 24 ore! Questa sembra essere una definizione incoerente ma il controllo di "H" ha corretto il mio bug.

Problemi correlati