Как правильно отформатировать NSTimeInterval как период времени, соблюдая i18n?

Учитывая NSTimeInterval, представляющий период времени, как мне создать удобочитаемую строку, которая выражает этот период времени таким образом, чтобы уважать i18N?

Например, если NSTimeInterval равен 10823,23435 секунд, то некоторые разумные способы рендеринга в виде строки для жителей США могут быть такими:

  • 3:23
  • 3 часа 23 секунды
  • и Т. Д.

(То есть то, что вы увидите на секундомере.)

Предположительно, другие локали могут использовать другой рендеринг.

Я знаю о NSDateFormatter и NSNumberFormatter, но мне не ясно, как использовать один из них для этой проблемы.

Я также знаю о FormatterKit, но он работает только с относительными периодами времени (например, «3 минуты назад»). Я ищу абсолютные периоды времени.

Придумать собственное решение для конкретной локали несложно, но решена ли уже эта проблема должным образом?

Спасибо.


person Chris    schedule 07.10.2014    source источник
comment
Возможный дубликат stackoverflow.com/questions/8128083/nstimeinterval-formatting   -  person David    schedule 07.10.2014
comment
Спасибо, @David, но в этом решении используется форматирование, предполагающее определенное форматирование периодов времени, а не создание строк для языкового стандарта пользователя. Я, вероятно, вернусь к этому, если ничего не подходит…   -  person Chris    schedule 07.10.2014
comment
@Zaph: я не вижу этих классов. Ссылка на сайт?   -  person Chris    schedule 07.10.2014
comment
@Chris Это еще не задокументировано. Мы можем увидеть их имя в справке по NSFormatter. Раздел наследования. На данный момент просто введите его в редакторе и перейдите к определению.   -  person rintaro    schedule 07.10.2014


Ответы (1)


Для iOS 8 есть NSDateComponentsFormatter и NSDateIntervalFormatter, они могут работать для вашего приложения.

Отсутствуют документы. См. NSHipster: NSFormatter
и
Foundation/NSDateIntervalFormatter.h

person zaph    schedule 07.10.2014
comment
Спасибо @Zaph, это именно то, что я хотел! - person Chris; 08.10.2014