2016-08-10 6 views
1

"dd HH:mm:ss"形式の残り時間があります。この形式から、カウントダウン時間を実行する必要があります。私はラベル残りの時間から迅速にcoutdown時間を実行する方法は?

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)) 
    } 

} 

を更新するために、このコード

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) 
} 

を使用していますが、私は私が間違っているの何私を修正し、正しい時刻を取得しておりません。

+0

どのような時が正しくないのですか?あなたは無事になるか、それとも常に2日間ですか? –

+0

私は "1 22:26:20"の文字列を渡すとラベルに "10957:16:57:22"という文字列が表示され、その日数は1になり、10957日になります –

答えて

0

NSDateFormatterを間違って使用しているためです。あなたのtimerStringには年と月がありません。時、分、秒だけです。もう1つは、タイムゾーンを調整するのを忘れたことです。

timeStringは、時間を秒単位で表し、day hour:minute:secondの形式にフォーマットされています。私が知る限り、Cocoa/UITouchはそれに適したフォーマッタを提供していません。しかし、それを構築するのは簡単です:

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

ありがとうございます私はtimeLeftの値を変更するタイマーでこれを使用しますか? これまでのところ、「01:22:26:20」だけを指定しています –

+0

これは別の質問です。あなたがここで尋ねたのは、文字列を秒数に変換する方法です –

関連する問題