Pregunta

Estoy modificando una aplicación web que utiliza globalizado almacena CultureInfo para cada usuario conectado.

El cliente le gustaría entrada de datos tiempo para ser localizada. Viendo que no es un problema ya que el formato ya está disponible. Sin embargo necesito para detectar si el CultureInfo actual es por tiempo de 24 horas o AM / PM para que pueda mostrar los cuadros de entrada correcta (no sólo un campo de texto).

Mi idea inicial era comprobar la propiedad de DateTimeInfo CultureInfo y ver si el ShortTimePattern contenía una H mayúscula o minúscula h, pero esto no se sentía lo suficientemente robusta como para mí.

¿Hay una mejor manera? He leído las propiedades de clase de ambos, pero a menos que me falta algo, no puedo ver cualquier método o propiedades existentes.

¿Fue útil?

Solución

No creo que hay una mejor manera de obtener esa información. El patrón de tiempo para una cultura podría contener cualquier cosa (un usuario podría incluso crear una referencia cultural personalizada donde el ShortTimePattern es "\ hola" y luego DateTime.ToString() volvería "hola" para cualquier momento). En ese caso, ¿cómo podría el marco de determinar si ese CultureInfo está en formato de 24 horas o de 12 horas?

Así que un DateTimeFormatInfo.ShortTimePattern "normal" contendrá necesariamente bien una 'h' o una 'H', de lo contrario no se visualizará la hora. Creo que se puede seguir su idea inicial y comprobar para eso. También puede comprobar que la 'h' o 'H' no se escapó con un \ como en mi "\ hola" ejemplo porque no sería representar la hora:)

Otros consejos

La forma más robusta es comprobar si DateTimeFormatInfo.AMDesignator es una cadena vacía.

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

Comprobación de 'H' / 'h' parece más robusta que la comprobación de la AM / PM de designación. Un buen ejemplo es en-gb: La cadena de formato de la hora es HH: mm y designadores de AM / PM se establecen en AM / PM Windows mostrará la hora en formato de 24 horas! Esta parece ser una definición inconsistente, pero la comprobación de 'H' fijo mi error.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top