2011-12-15 19 views
5

Tengo un drawRect que hace que una línea de tiempo se parezca un poco a iCal. Uso un ciclo for para escribir los tiempos a lo largo de una vista de desplazamiento. Me preguntaba si A) hay una manera de determinar si el usuario ha elegido un reloj de 12 o 24 horas en la configuración del sistema y B) si hay una forma más eficiente de cambiar las etiquetas de tiempo y luego llamar a una consulta 'if' en cada pase del bucle 'for'. Saludos Buscar si el usuario prefiere reloj de 12/24 horas?

+0

Tienes que tener cuidado. Si el usuario ha configurado el modo de 12/24 horas en Configuración en contra de la configuración regional, entonces NSDateFormatter (y probablemente algunos otros) ignoran la presencia/ausencia de cualquier calificador 'a' y proporcionan (o no) el valor AM/PM basado en el Ajuste del modo de 12/24 horas. Todo es bastante complicado. –

Respuesta

1
NSDate *today = [NSDate date]; 
NSString *formattedString = [NSDateFormatter localizedStringFromDate:today dateStyle: kCFDateFormatterNoStyle timeStyle: kCFDateFormatterShortStyle]; 

NSRange foundRange; 
foundRange = [formattedString rangeOfString:"am" options:NSCaseInsensitiveSearch]; 
if(foundRange.location == NSNotFound) { 
    foundRange = [formattedString rangeOfString:"pm" options:NSCaseInsensitiveSearch]; 
} 

BOOL isAMPMSettingOn = (foundRange.location != NSNotFound); 
5
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setDateStyle:NSDateFormatterNoStyle]; 
[dateFormatter setTimeStyle:NSDateFormatterLongStyle]; 

if([[dateFormatter dateFormat] rangeOfString:@"a"].location != NSNotFound) { 
    // user prefers 12 hour clock 
} else { 
    // user prefers 24 hour clock 
} 
+2

Esta es en realidad la mejor respuesta, ya que muchos países especifican AM y PM como a.m. y p.m .. – MiguelB

+1

@Leuguimerius pero algunos idiomas como el chino usan caracteres totalmente diferentes para AM y PM. Vea mi respuesta http://stackoverflow.com/a/23621308/72176 para saber cómo manejar eso. –

+0

@WilliamDenniss ¡Brillante! Resuelve todo No tenía idea de que existiera ese formateador. – MiguelB

6

Las respuestas anteriores suponen que los símbolos "PM" "AM" y se representan en caracteres latinos. Este código adaptado de keyur bhalodiya hace un mejor trabajo en el manejo de idiomas como el chino, utilizando los métodos AMSymbol y PMSymbol de NSDateFormatter.

-(BOOL)uses24hourTime 
{ 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setLocale:[NSLocale currentLocale]]; 
    [formatter setDateStyle:NSDateFormatterNoStyle]; 
    [formatter setTimeStyle:NSDateFormatterShortStyle]; 

    NSString *dateString = [formatter stringFromDate:[NSDate date]]; 
    NSRange amRange = [dateString rangeOfString:[formatter AMSymbol]]; 
    NSRange pmRange = [dateString rangeOfString:[formatter PMSymbol]]; 

    return (amRange.location == NSNotFound && pmRange.location == NSNotFound); 
} 
Cuestiones relacionadas