2016-02-15 8 views
5

Как анализировать значение строки, например 12:02:21.3213, до NSTimeInterval? NSDateComponentsFormatter, доступный с iOS8, поддерживает только форматирование, а не синтаксический анализ.Как разбирать строку в NSTimeInterval

+1

Возможный дубликат [Как я могу преобразовать строку даты в NSDate] (http://stackoverflow.com/questions/24777496/how -can-i-convert-string-date-to-nsdate) – rghome

+0

@rghome: Нет, не дубликат, по крайней мере, не из * этого вопроса. - «12: 02: 21.3213» здесь * продолжительность * (которая может быть представлена ​​как NSTimeInterval), а не как момент времени (который будет NSDate). –

+0

Возможно, это не точный дубликат. Вы можете проанализировать время на 1 января 1970 года, а затем получить интервал для этой даты. Наверное, это всего лишь отдельный ответ сам по себе. – rghome

ответ

7

Вот как вы можете сделать это в Swift:

func parseDuration(timeString:String) -> NSTimeInterval { 
    guard !timeString.isEmpty else { 
     return 0 
    } 

    var interval:Double = 0 

    let parts = timeString.componentsSeparatedByString(":") 
    for (index, part) in parts.reverse().enumerate() { 
     interval += (Double(part) ?? 0) * pow(Double(60), Double(index)) 
    } 

    return interval 
} 

Он работает для значений как 2:12:12, 02:01:23.123213

6

Решение, предлагаемое Бартош Hernas работал для меня, спасибо!

Для удобства здесь для Swift 3:

func parseDuration(_ timeString:String) -> TimeInterval { 
    guard !timeString.isEmpty else { 
     return 0 
    } 

    var interval:Double = 0 

    let parts = timeString.components(separatedBy: ":") 
    for (index, part) in parts.reversed().enumerated() { 
     interval += (Double(part) ?? 0) * pow(Double(60), Double(index)) 
    } 

    return interval 
} 
Смежные вопросы