2009-12-28 12 views
8

Come è possibile rilevare se iPhone sta visualizzando l'ora in modalità 12 ore o 24 ore?Rileva se iPhone sta visualizzando l'ora in modalità 12 ore o 24 ore?

Attualmente sto monitorando la regione corrente per le modifiche, tuttavia questa non è l'unica impostazione che influisce sul modo in cui vengono visualizzati i tempi. La commutazione di 24 ore nelle impostazioni di data & ha la priorità sulle impostazioni correnti delle regioni.

C'è un modo per rilevare questa impostazione di 12/14 ore?

risposta

13

Ho trovato un modo decente per determinarlo con una piccola funzione che ho aggiunto a una categoria di NSLocale. Sembra essere abbastanza preciso e non ha riscontrato alcun problema durante il test con diverse regioni.

@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

Si sta utilizzando la classe NSDateFormatter? Per quanto ne so, rispetta qualsiasi impostazione di formato orario regionale che l'utente ha in atto.

modifica - re: Il tuo commento:

Il confronto format-string potrebbe essere il giusto approccio. Qualcosa sulla falsariga di:

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 che, come la vostra applicazione si chiude, poi farlo di nuovo quando i lanci app e controllare contro il valore memorizzato nei valori predefiniti.

+1

Fondamentalmente ho bisogno di rilevare se quell'impostazione è cambiata dall'ultimo carico. Sono in grado di rilevare l'identificatore locale, ma non esiste alcuna impostazione per l'impostazione 24 ore. L'unica cosa che posso pensare è di confrontare una stringa di data formattata salvata, ma ci sono problemi con i fusi orari e l'ora legale che potrebbero causare problemi con confronti diretti. –

+0

Grazie per questa aggiunta, tuttavia ho notato che diverse regioni mostrano effettivamente ore con 0 in modalità 24 ore. –

+0

In tal caso, prendi i primi due caratteri come sopra e controlla se sono "00" o "0:". –

Problemi correlati