Как я могу определить, установлен ли iPhone для 12-часового или 24-часового отображения времени?

Я думал, что видел, что что-то ответило на это на ПОЭТОМУ недавно, но теперь я не могу найти его. Вот код, который я использую теперь, чтобы определить, ли настройки для 24-часового отображения времени. Это работает на меня в США, но я не знаю, будет ли это работать во всех локалях. Это достаточно или является там лучшим способом узнать текущую установку для этого?

+(BOOL) use24HourClock
{
    BOOL using24HourClock = NO;

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];    
    [dateFormatter setLocale: [NSLocale currentLocale]];    
    [dateFormatter setDateStyle:kCFDateFormatterNoStyle];
    [dateFormatter setTimeStyle:kCFDateFormatterShortStyle];    
    // get date/time (1Jan2001 0000UTC)
    NSDate* midnight = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:0];   
    NSString* dateString = [dateFormatter stringFromDate: midnight];
    // dateString will either be "15:00" or "16:00" (depending on DST) or
    // it will be "4:00 PM" or "3:00 PM" (depending on DST)
    using24HourClock = ([dateString length] == 5);
    [midnight release];
    [dateFormatter release];    

    return using24HourClock;
}
41
задан progrmr 18 December 2009 в 18:36
поделиться

1 ответ

Я только что задал похожий вопрос и мне удалось придумать приличный способ определить это с помощью небольшой функции, которую я добавил в категорию NSLocale . Она оказалась довольно точной и при тестировании с несколькими регионами не нашла с ней проблем.

@implementation NSLocale (Misc)
- (BOOL)timeIs24HourFormat {
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setLocale:self];
    [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

Надеюсь, это поможет!

.
22
ответ дан 27 November 2019 в 00:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: