2016-08-10 8 views
1

"dd HH : mm : ss"형식으로 남은 시간이 있습니다.이 시간부터 카운트 다운 시간을 실행해야합니다. 나는 라벨남은 시간부터 빨리 종료하는 방법?

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을 잘못 사용했기 때문에. 1 년 동안 귀하의 timerString에는 1 년, 1 개월, 1 시간, 1 분, 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

다른 질문입니다. 여기서 물어 본 것은 문자열을 초 수로 변환하는 방법입니다. –