Я просмотрел этот номер Wikipedia article, чтобы узнать, как работает ISO-8601. Я не эксперт по какао, но я уверен, что если вы сможете разобрать эту строку и извлечь компонент час, минуту, секунду, день и т. Д., То получить его в NSTimeInterval должно быть легко. Сложная часть разбирает его. Я бы, наверное, сделал бы это примерно так:
Сначала разделите строку на две отдельные строки: одну, представляющую дни, и одну, представляющую время. NSString имеет метод экземпляра componentsSeparatedByString:. NSString, который возвращает NSArray из подстрок исходного NSString отделенного параметра вы передаете в это будет выглядеть примерно так:
NSString* iso8601 = /*However you're getting your string in*/
NSArray* iso8601Parts = [iso8601 componentsSeparatedByString:@"T"];
Далее, поиск первого элемента iso8601Parts для каждого от возможных индикаторов продолжительности дня (Y, M, W и D). Когда вы найдете его, возьмите все предыдущие цифры (и, возможно, десятичную точку), отбросьте их к плавающей точке и сохраните их где-нибудь. Помните, что если бы существовал только элемент времени, то iso8601Parts [0] будет пустой строкой.
Затем сделайте то же самое, что ищите временные части во втором элементе iso8601Parts для возможных индикаторов времени (H, M, S). Помните, что если бы существовал только компонент дня (т. Е. В исходной строке не было символа «T»), то iso8601Parts будет иметь длину только один, а попытка доступа к второму элементу вызовет исключение из-за пределов ,
NSTimeInterval - это просто длительное хранение нескольких секунд, поэтому конвертируйте отдельные фрагменты, которые вы вытащили за секунды, добавьте их вместе, сохраните их в своем NSTimeInterval и установите.
Извините, я знаю, что вы попросили «простой» способ сделать это, но, основываясь на моем (по общему признанию) поиске и знании API, это самый простой способ сделать это.
Написание небольшого парсера было не совсем тем, что я имел в виду, когда начал искать легкое решение, но, похоже, нет другого пути. Я думал, что может быть трюк с использованием специальной строки формата с NSDateFormatter, но, похоже, она не работает с временными интервалами. Во всяком случае, я закончил тем, что написал аналогичный парсер. Спасибо всем за помощь. – Zargony
Одна маленькая вещь, которую следует иметь в виду с приведенным выше примером кода (да, я понимаю, что это, вероятно, предназначалось для доказательства точки, а не для фактического потребления). Стандарт ISO 8601 позволяет задавать значения продолжительности как дробные значения (т. Е. 1,5, 0,6 и т. Д.), Которые могут быть разделены символом «.». или ",". –