2016-08-10 7 views
1

Ich habe die verbleibende Zeit im "dd HH: mm: ss" -Format, von dem ich Countdown-Zeit ausführen muss. Ich verwende diesen CodeWie Coutdown-Zeit von der verbleibenden Zeit in Swift ausführen?

func updateCounter() { 
    let dateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "dd HH:mm:ss" 
    let date = dateFormatter.dateFromString(timerString) 
    let timeLeft = date!.timeIntervalSinceReferenceDate 
    lblTImer.text = timeLeft.time 
    lblTImer.font = UIFont.init(name: "Gotham-Book", size: 20) 
} 

für Etiketten Aktualisierung

extension NSTimeInterval { 
    var time:String { 
     return String(format:"%02d : %02d : %02d : %02d", Int((self/86400)), Int((self/3600.0)%24), Int((self/60.0)%60), Int((self)%60)) 
    } 

} 

aber ich bin nicht richtig Zeit bekommen, korrigieren Sie mich, was ich falsch mache.

+0

was bedeutet nicht richtige Zeit? Du bekommst null oder es sind immer 2 Tage? –

+0

wenn ich "1 22:26:20" in der Zeit Zeichenfolge passiere, dann bekomme ich "10957: 16: 57: 22" in Label, es ist wie keine der Tage vergangen ist 1 und ich bekomme 10957 Tage –

Antwort

0

Weil Sie NSDateFormatter falsch verwendet haben. Zum einen gibt es kein Jahr und Monat in Ihrem timerString, nur Stunde, Minute, Sekunde. Zum anderen haben Sie vergessen, die Zeitzone anzupassen.

Ihre timeString repräsentiert eine Zeitdauer, in Sekunden und formatiert in day hour:minute:second Stil. Soweit ich weiß, bietet Cocoa/UITouch dafür keinen geeigneten Formatierer. Aber es ist einfach, einen zu bauen:

extension NSTimeInterval { 
    init(fromString str: String) { 
     let units: [Double] = [1, 60, 3600, 86400] 
     let components = str.componentsSeparatedByCharactersInSet(NSCharacterSet(charactersInString: " :")).reverse() 

     self = zip(units, components) 
       .map { $0 * (Double($1) ?? 0) } 
       .reduce(0, combine: +) 
    } 

    var time:String { 
     return String(format:"%02d : %02d : %02d : %02d", Int((self/86400)), Int((self/3600.0)%24), Int((self/60.0)%60), Int((self)%60)) 
    } 
} 


let timerString = "1 22:26:20" 

let timeLeft = NSTimeInterval(fromString: "1 22:26:20") 
print(timeLeft)   // 167180.0 
print(timeLeft.time) // 01 : 22 : 26 : 20 
+0

danke, aber wie kann Ich benutze das mit Timer, die timeLeft Wert ändern? Inzwischen gibt es nur noch "01: 22: 26: 20" –

+0

Das ist eine andere Frage. Sie haben hier gefragt, wie Sie eine Zeichenfolge in die Anzahl von Sekunden konvertieren können –

Verwandte Themen