Как получить формат системного времени, когда регион является "Соединенным Королевством" в ios?

Я использую следующий код для получения формата системного времени в ios. И он отлично работает, когда мой нынешний регион настроен на "United State", но когда я меняю регион с "United State" на "United Kingdom", он всегда дает 12-часовую форму.

#pragma mark
#pragma mark - get system time
-(BOOL)getSystemTimeFormat
{
    NSString *strDateFormate = @"hh a";
    NSString *dateFormat = [NSDateFormatter dateFormatFromTemplate:strDateFormate options:0 locale:[NSLocale currentLocale]];
    if ([dateFormat rangeOfString:@"h"].location != NSNotFound)
    {
        [kNSUserDefaults setBool:YES forKey:@"TimeFormat"];
        [kNSUserDefaults synchronize];
        return YES;
    }
    else
    {
        [kNSUserDefaults setBool:NO forKey:@"TimeFormat"];
        [kNSUserDefaults synchronize];
        return NO;
    }

}

Журнал "Единого государства":

2015-01-27 11: 32: 16.090 [350: 60b] 12 Formate:: 0
    2015-01-27 11: 32: 16.585 [350: 60b] Подключить
    2015-01-27 11: 32: 16.591 [350: 60b] Обновление связи...
    2015-01-27 11: 32: 16.604 [350: 60b] Обновление связи...
    2015-01-27 11: 32: 16.622 [350: 60b] Обновление связи...

Журнал региона "Великобритания"::

2015-01-27 11: 33: 35.785 [364: 60b] 12 Formate:: 1
    2015-01-27 11: 33: 36.777 [364: 60b] Подключите
    2015-01-27 11: 33: 36.780 [364: 60b] Обновление связи...
    2015-01-27 11: 33: 36.806 [364: 60b] Обновление связи...
    2015-01-27 11: 33: 36.832 [364: 60b] Обновление связи...

Ответы

Ответ 1

После серии r & d в этом разделе, наконец, я найду решение этой проблемы.

Здесь используется специальная строка шаблона даты, называемая "j" . В соответствии с спецификацией ICU, "j" ...

Запросит предпочтительный формат часов для локали (h, H, K или k), определяемый использованием h, H, K или k в стандартном формате короткого времени для локали. При реализации такого API "j" должен быть заменен h, H, K или k перед началом сопоставления с данными доступных форматов. Обратите внимание, что использование "j" в скелете, переданном API, является единственным способом запросить скелет в качестве предпочтительного временного цикла (12-часовой или 24-часовой). Последнее предложение важно. Это "единственный способ запросить скелет для выбранного типа времени". Поскольку NSDateFormatter и NSCalendar построены на библиотеке ICU, это также верно.

Итак, я изменил значение christt в моем коде

#pragma mark
#pragma mark - get system time
-(BOOL)getSystemTimeFormat
{
    NSString *strDateFormate = @"j";
    NSString *dateFormat = [NSDateFormatter dateFormatFromTemplate:strDateFormate options:0 locale:[NSLocale currentLocale]];
    if ([dateFormat rangeOfString:@"a"].location != NSNotFound)
    {
        [kNSUserDefaults setBool:YES forKey:@"TimeFormat"];
        [kNSUserDefaults synchronize];
        return YES;
    }
    else
    {
        [kNSUserDefaults setBool:NO forKey:@"TimeFormat"];
        [kNSUserDefaults synchronize];
        return NO;
    }

}

Я нашел это решение из следующей ссылки Как определить, установлен ли iPhone для 12-часового или 24-часового отображения времени?.

Ответ 2

В основном вы пытаетесь определить, используется ли 12h или 24h формат, правильно? Если да, попробуйте:

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]];
BOOL is24h = (amRange.location == NSNotFound && pmRange.location == NSNotFound);
[formatter release];
NSLog(@"%@\n",(is24h ? @"YES" : @"NO"));

Источник: Обнаружение, если формат времени находится в формате 12hr или 24hr