Удаление суффикса 12-часовых часов с строки NSString - PullRequest
2 голосов
/ 21 января 2010

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

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

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

Заранее спасибо :))

Ответы [ 2 ]

1 голос
/ 21 января 2010

Локальных безопасных способов сделать это не существует.

Используйте 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 голосов
/ 21 января 2010

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

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

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

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

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

Похоже, что это стабильное решение для всех языков.

...