2013-03-19 2 views
1

시간 형식을 감지하려고하는데 12 시간/24 시간 형식입니다. 나는 캘린더에 시간을 정하고 있다고 가정합니다.
다음 코드를 사용하여 viewDidLoad 메서드에서 장치의 24 시간 형식을 검색했습니다.ipad sdk에서 24 시간 형식을 검색하는 방법

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]]; 
is24h = (amRange.location == NSNotFound && pmRange.location == NSNotFound); 

그 후

if (is24h == TRUE) { 
} else { 
} 

을 다음과 같이 내가 확인하고하지만 난 항상 is24h의 값이 false 얻고있다. 기기가 12 시간 형식으로 설정된 경우 캘린더에서 시간을 설정할 수 있습니다. 24 시간 형식이라면 시간을 정할 수 없습니다.

어디에서 변경해야하는지 알려주실 수 있습니까? 에 따라 시간 형식을

- (BOOL)timeIs12HourFormat { 
    NSString *formatStringForHours = [NSDateFormatter dateFormatFromTemplate:@"j" options:0 locale:[NSLocale currentLocale]]; 
    NSRange containsA = [formatStringForHours rangeOfString:@"a"]; 
    BOOL hasAMPM = containsA.location != NSNotFound; 
    return hasAMPM; 
} 

를 결정하는

답변

9

사용이 방법은 unicode date format guidej이 특별한 목적의 상징

을 의미한다. 그것은 패턴이나 스켈레톤 데이터에서 발생해서는 안됩니다. 대신 유연한 날짜 패턴 생성을 수행하는 API에 전달 된 스켈레톤에 사용하기 위해 예약되어 있습니다. 이러한 상황에서 h, H, K 또는 k가 로켈에 대한 표준 짧은 시간 형식으로 사용되는지 여부에 따라 결정되는 로켈 (h, H, K 또는 k)의 기본 시간 형식을 요청합니다. 이러한 API의 구현에서는 availableFormats 데이터와의 일치를 시작하기 전에 'j'를 h, H, K 또는 k로 대체해야합니다. API에 전달 된 스켈레톤에서 'j'를 사용하면 스켈레톤 요청에 로케일의 기본 시간주기 유형 (12 시간 또는 24 시간)을 요청할 수있는 유일한 방법입니다.

이 먼저 장치의 currentLocale에서은 formatString을 얻을 것이다 그리고 그것은 24 시간 형식 다음 "a"는 다음 존재이다가 12 시간 형식이며, 그렇지 않은 경우 확인합니다

편집 .

+1

이것은 매우 수수합니다. 설명에 신경 써라? –

-2

다음과 같이 12 시간 시계가 다음하는 currentDate을 설정하려면 다음

[currentDate setDateFormat:@"yyyy-MM-dd h:mm:ss a"]; 

을 다음과 같이 24 시간 시계가 다음하는 currentDate을 설정하려면 다음

[currentDate setDateFormat:@"yyyy-MM-dd HH:mm"]; 
+0

형식은 형식을 설정하는 방법이 아니라 형식을 감지하는 것이 었습니다. –

1
안녕하세요 지금 내 코드가 작동

벌금. 나는 다음과 같이 코드를 작성했다.

-(BOOL)timeIs24HourFormat{ 

    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]]; 
    is24h = (amRange.location == NSNotFound && pmRange.location == NSNotFound); 

    return is24h; 
} 
관련 문제