2009-12-28 18 views
8

¿Cómo se puede detectar si el iPhone muestra la hora en el modo de 12 horas o de 24 horas?¿Detecta si el iPhone muestra la hora en el modo de 12 horas o 24 horas?

Actualmente superviso la región actual en busca de cambios, sin embargo, esa no es la única configuración que afecta la cantidad de horas que se muestran. El alternar de 24 horas en la configuración de la fecha & anula las configuraciones de regiones actuales.

¿Hay alguna manera de detectar esta configuración de 12/14 horas?

Respuesta

13

He descubierto una manera decente de determinar esto con una pequeña función que he agregado a una categoría de NSLocale. Parece ser bastante preciso y no ha encontrado ningún problema al probarlo en varias regiones.

@implementation NSLocale (Misc) 
- (BOOL)timeIs24HourFormat { 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setDateStyle:NSDateFormatterNoStyle]; 
    [formatter setTimeStyle:NSDateFormatterShortStyle]; 
    NSString *dateString = [formatter stringFromDate:[NSDate date]]; 
    NSRange amRange = [dateString rangeOfString:[formatter AMSymbol]]; 
    NSRange pmRange = [dateString rangeOfString:[formatter PMSymbol]]; 
    BOOL is24Hour = amRange.location == NSNotFound && pmRange.location == NSNotFound; 
    [formatter release]; 
    return is24Hour; 
} 
@end 
1

¿Está utilizando la clase NSDateFormatter? Hasta donde yo sé, eso respeta cualquier configuración de formato de hora regional que el usuario tenga en su lugar.

edición - re: su comentario:

La comparación serie-formato podría ser el enfoque correcto. Algo a lo largo de las líneas de:

NSDateComponents *midnightComp = [[NSDateComponents alloc] init]; 
[midnightComp setHour:0] 
[midnightComp setMinute:0]; 
NSDateFormatter *format = [[NSDateFormatter alloc] init]; 
[format setDateStyle:NSDateFormatterNoStyle]; 
[format setTimeStyle:NSDateFormatterShortStyle]; 
BOOL midnightIsZeros = [[[format stringFromDate:[[NSCalendar currentCalendar] dateFromComponents:midnightComp]] substringToIndex:2] isEqualToString:@"00"]; 

[[NSUserDefaults standardUserDefaults] setBool:midnightIsZeros forKey:@"TimeWas24Hour"]; 

Run que a medida que su aplicación se cierra, y luego hacerlo de nuevo cuando el lanzamiento de aplicaciones y compararla con el valor almacenado en los valores por defecto.

+1

Básicamente necesito detectar si esa configuración ha cambiado desde la última carga. Puedo detectar el identificador de configuración regional, pero no hay tal configuración para la configuración de 24 horas. Lo único que se me ocurre es comparar una cadena de fecha guardada y formateada, pero hay problemas con las zonas horarias y los ahorros de luz diurna que pueden dar como resultado problemas con las comparaciones directas. –

+0

Gracias por esa adición, sin embargo, he notado que varias regiones realmente muestran horas con 0 en el modo de 24 horas. –

+0

En ese caso, tome los primeros dos caracteres como arriba y compruebe si son "00" o "0:". –

Cuestiones relacionadas