2011-12-15 12 views
5

Mam drawRect, który sprawia, że ​​linia czasu jest trochę jak iCal. Używam pętli for do zapisywania czasów w widoku przewijania. Zastanawiałem się, czy A) jest sposób na określenie, czy użytkownik wybrał zegar 12- lub 24-godzinny w ustawieniach systemowych i B) czy istnieje skuteczniejszy sposób zmiany etykiet czasowych, a następnie wywołanie zapytania "jeśli" przy każdym przejściu pętli "for". CheersZnajdź, czy użytkownik woli zegar 12/24-godzinny?

+0

Musisz być ostrożny. Jeśli użytkownik ustawił tryb 12/24 godzinny w Ustawieniach w przeciwieństwie do ustawień narodowych, to NSDateFormatter (i prawdopodobnie kilka innych) ignoruje obecność/brak jakiegokolwiek kwalifikatora "a" i dostarcza (lub nie) wartość AM/PM na podstawie Ustawienie trybu 12/24 godzin. To wszystko jest dość niebezpieczne. –

Odpowiedz

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

To jest właściwie najlepsza odpowiedź, ponieważ wiele krajów określa AM i PM jako pm i p. .. – MiguelB

+1

@Leuguimerius, ale niektóre języki, jak chiński, używają zupełnie innych znaków dla AM i PM. Zobacz moją odpowiedź http://stackoverflow.com/a/23621308/72176, jak sobie z tym poradzić. –

+0

@WilliamDenniss Brilliant! Rozwiązuje wszystko. Nie miałem pojęcia, że ​​taki formatter istnieje. – MiguelB

6

wcześniejszych odpowiedzi zakładają, że "AM" i "PM" Symbole są reprezentowane łacińską. Ten kod zaadaptowany z wersji keyur bhalodiya lepiej radzi sobie z obsługą języków takich jak chiński, stosując metody AMSymbol i .

-(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); 
} 
Powiązane problemy