Creí haber visto algo que respondía a esto recientemente, pero ahora no puedo encontrarlo. Aquí está el código que estoy usando ahora para determinar si la configuración es para mostrar la hora de 24 horas. Funciona para mí en los EE. UU., Pero no sé si funcionará en todos los entornos. ¿Es suficiente o hay una mejor manera de averiguar la configuración actual para esto?¿Cómo puedo determinar si el iPhone está configurado para visualización de 12 horas o 24 horas?
+(BOOL) use24HourClock
{
BOOL using24HourClock = NO;
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale: [NSLocale currentLocale]];
[dateFormatter setDateStyle:kCFDateFormatterNoStyle];
[dateFormatter setTimeStyle:kCFDateFormatterShortStyle];
// get date/time (1Jan2001 0000UTC)
NSDate* midnight = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:0];
NSString* dateString = [dateFormatter stringFromDate: midnight];
// dateString will either be "15:00" or "16:00" (depending on DST) or
// it will be "4:00 PM" or "3:00 PM" (depending on DST)
using24HourClock = ([dateString length] == 5);
[midnight release];
[dateFormatter release];
return using24HourClock;
}
Bonito 3-liner. Me pregunto, ¿qué significa exactamente la "a"?¿Es posible que algún ajuste oculto pueda cambiar el símbolo del ciclo de tiempo a "AM"? ¿Debería cambiarse la línea de rango a ' NSRange containsA = [formatStringForHours rangeOfString: @" a "options: NSCaseInsensitiveSearch];'? – Wienke
@Wienke "a" es el símbolo de la ICU para el designador AM/PM. Nunca puede ser "A", porque la UCI usa "A" para significar algo totalmente diferente (milisegundos en el día). –
+1, me siento mucho más cómodo buscando un personaje que tenga un significado fijo definido y que no cambie según la configuración regional. – DarkDust