Как получить формат системного времени, когда регион является "Соединенным Королевством" в 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