2009-12-28 8 views
8

Wie können Sie feststellen, ob das iPhone die Uhrzeit im 12-Stunden- oder im 24-Stunden-Modus anzeigt?Ermitteln, ob das iPhone die Uhrzeit im 12-Stunden- oder 24-Stunden-Modus anzeigt?

Derzeit überwache ich die aktuelle Region auf Änderungen, aber das ist nicht die einzige Einstellung, die sich darauf auswirkt, wie die Zeit angezeigt wird. Die 24-Stunden-Umschaltung im Datum & Zeiteinstellungen überschreibt die aktuellen Regionen Einstellungen.

Gibt es eine Möglichkeit, diese 12/14-Stundeneinstellung zu erkennen?

Antwort

13

Ich habe eine anständige Methode gefunden, dies mit einer kleinen Funktion zu bestimmen, die ich zu einer Kategorie von NSLocale hinzugefügt habe. Es scheint ziemlich genau zu sein und hat beim Testen mit mehreren Regionen keine Probleme damit gefunden.

@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

Verwenden Sie die Klasse NSDateFormatter? Soweit ich weiß, respektiert das die regionalen Zeitformateinstellungen, die der Benutzer eingerichtet hat.

bearbeiten - re: Ihr Kommentar:

Der Format-String-Vergleich könnte der richtige Ansatz sein. Etwas entlang der Linien von:

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, die als App beendet wird, es dann wieder tun, wenn die App startet und überprüfen Sie es gegen den Wert in den Voreinstellungen gespeichert.

+1

Ich muss grundsätzlich feststellen, ob diese Einstellung seit der letzten Belastung geändert hat. Ich kann die Gebietsschema-ID erkennen, aber es gibt keine solche Einstellung für die 24-Stunden-Einstellung. Ich kann nur daran denken, einen gespeicherten formatierten Datums-String zu vergleichen, aber es gibt Probleme mit Zeitzonen und Sommerzeit, die zu Problemen bei direkten Vergleichen führen können. –

+0

Danke für diesen Zusatz, aber ich habe festgestellt, dass mehrere Regionen tatsächlich Stunden mit 0 im 24-Stunden-Modus zeigen. –

+0

In diesem Fall nehmen Sie die ersten beiden Zeichen wie oben und prüfen Sie, ob sie entweder "00" oder "0:" sind. –

Verwandte Themen