2016-02-15 17 views
5

Jak przeanalizować wartość ciągu, np. 12:02:21.3213, aby uzyskać NSTimeInterval? NSDateComponentsFormatter, dostępny od iOS8, obsługuje tylko formatowanie, a nie parsowanie.Jak przeanalizować ciąg znaków do NSTimeInterval

+1

Możliwy duplikat [? W jaki sposób mogę przekonwertować datę ciąg do NSDate] (http://stackoverflow.com/questions/24777496/how -can-i-convert-string-date-to-nsdate) – rghome

+0

@rghome: Nie, nie duplikat, a przynajmniej nie * tego * pytania. - "12: 02: 21.3213" tutaj jest * czas trwania * (który może być reprezentowany jako NSTimeInterval), a nie jako punkt w czasie (który byłby NSDate). –

+0

Może nie dokładny duplikat. Możesz przeanalizować czas 1 stycznia 1970, a następnie uzyskać interwał dla tej daty. Sądzę, że chodzi tu tylko o osobną odpowiedź. – rghome

Odpowiedz

7

Oto jak można to zrobić w 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 
} 

Działa na wartościach jak 2:12:12, 02:01:23.123213

6

Rozwiązanie dostarczone przez Bartosz Hernas pracował dla mnie, dziękuję!

Dla wygody, to jest tutaj dla 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 
} 
Powiązane problemy