2010-01-21 3 views
2

У меня нехватка экранной недвижимости за мои метки времени в приложении для iPhone. Мое решение состоит в том, чтобы иметь время, например. 12:00 в одной строке, а затем, если пользовательский локаль определяет, что используется AM-PM, на втором метке ниже.Снятие 12-часового суффикса часов от NSString

Поскольку AM-PM также имеет локализованные варианты, я не могу просто искать буквы «AM» или «PM», тогда я подумал об удалении двух последних букв, но, проверив, я узнал, что некоторые языки используют формат вот так: «FM» "ЭМ". Моя следующая мысль заключалась в том, чтобы разбить все после первых 5 цифр (12:34), но на часовые интервалы ниже 10, что тоже не хорошо.

Существует ли «безопасный для локали» способ всегда удалять локализованный суффикс и переместить его в новую строку независимо от настроек пользователя?

Спасибо заранее :)

ответ

0

я в конечном итоге решить ее, как это и затем вручную проверить его с 15+ настройками локали:

NSArray *timeParts = [NSArray arrayWithArray:[[timeFormatter stringFromDate:myDate] componentsSeparatedByString:@" "]]; 

Затем я проверить массив timeParts:

if ([timeParts count] > 1) {...} 

count Если это 1 оно языковой стандарт без суффикса, и я не устанавливаю метку «AM/PM». Else, я поставил обе метки, тем timeLable с [timeParts objectAtIndex:0] и localeLabel с [timeParts objectAtIndex:1]

Это кажется устойчивым решением для всех регионов.

1

Там нет локали безопасный способ сделать это.

Используйте NSDateFormatter для генерации двух строк.

NSDateFormatter *timeOfDayFormatter = [[[NSDateFormatter alloc] init] retain]; 
[timeOfDayFormatter setDateFormat:@"hh:mm"]; 

NSDateFormatter *amPmFormatter = [[[NSDateFormatter alloc] init] retain]; 
[amPmFormatter setDateFormat:@"aa"]; 


NSLog(@"Time is: %@ %@", 
    [timeOfDayFormatter stringFromDate:theDate], 
    [amPmFormatter stringFromDate:theDate]); 

Теперь вы можете разместить свой пользовательский интерфейс с двумя строками.

24-часовой формат является стандартным, где я живу. Я бы «запустил» этот формат для пользователя, если экранная недвижимость является реальной проблемой.

+0

Hi Niels and thanks :) У меня уже есть объект NSDate, и я мог бы легко «форсировать» 24-часовой формат для пользователя (сделало бы мир более простым местом), но я хотел бы уважать их настройки. Когда Im имеет дело с пользователем, который имеет 24-часовой формат, не проблема. Но когда это 12-часовой формат, мне нужно поднять флаг и вырезать суффикс «AM» или «PM» из строки и переместить его в отдельный UILabel. Приложение предназначено для встреч, поэтому время и даты - важная вещь, и я не хочу, чтобы пользователи чувствовали себя неуверенными или сомневающимися в отношении времени (как и при работе с 12-часовыми часами :)) – RickiG

+0

Я бы либо пошел с 24-часовым обозначением или полной нотой AM/PM. Я не думаю, что вы можете уважать локали пользователей * и * калечить формат отображения. Возможно, есть и другой способ сообщить пользователю, что встречи наступают ... «Через 10 минут», красный флаг, значок часов или что-то подобное? Значок солнца или луны? –

+0

Hi Niels. Это скорее вопрос NSString, чем вопрос NSDate. Я использую NSDateFormatterShortStyle для даты. преобразуйте его в NSString. Если эта строка содержит суффикс часов на 12 часов, переместите этот суффикс на метку под меткой времени. Это также хорошо для других вещей. например суффикс AM PM, конечно, имеет тот же размер шрифта, что и метка, в которую он помещен. удалив его и показывая на отдельной метке, я также могу установить размер на меньшее, чем метка времени. Еще раз спасибо. – RickiG