2009-12-28 3 views
8

iPhone이 12 시간 또는 24 시간 모드로 시간을 표시하는지 여부를 어떻게 확인할 수 있습니까?iPhone이 12 시간 또는 24 시간 모드로 시간을 표시하는지 여부를 감지합니까?

현재 현재 지역에서 변경 사항을 모니터링하고 있지만 시간 표시 방법에만 영향을 미치는 것은 아닙니다. & 시간 설정의 24 시간 토글은 현재 지역 설정보다 우선합니다.

12/14 시간 설정을 감지하는 방법이 있습니까?

답변

13

NSLocale 카테고리에 추가 한 약간의 기능으로이를 확인하는 방법을 알았습니다. 그것은 꽤 정확하고 여러 지역에서 테스트하는 동안 아무런 문제가 발견되지 않았습니다.

@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

NSDateFormatter 클래스를 사용하고 있습니까? 내가 아는 한, 사용자는 지역 시간 형식 설정을 존중합니다.

편집 - 재 : 당신의 코멘트 :

형식 문자열 비교는 올바른 방법이 될 수 있습니다. 앱이 종료로, 다시 할 때 응용 프로그램 출시를 그렇게하고 기본값에 저장된 값에 대해 그것을 확인

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"]; 

실행 :의 라인을 따라 뭔가.

+1

기본적으로 마지막로드 이후 설정이 변경되었는지 여부를 감지해야합니다. 로케일 식별자를 감지 할 수는 있지만 24 시간 설정에 대한 설정은 없습니다. 내가 생각할 수있는 것은 저장된 형식의 날짜 문자열을 비교하는 것이지만 시간대와 일광 절약 시간에 직접적인 문제가 발생할 수있는 문제가 있습니다. –

+0

그 주셔서 감사합니다. 그러나 여러 지역이 실제로 24 시간 모드에서 0으로 시간을 표시합니다. –

+0

그런 경우 위의 두 글자를 잡고 "00"인지 "0 :"인지 확인하십시오. –