如何从swift中的剩余时间运行coutdown时间?

如何从swift中的剩余时间运行coutdown时间?,swift,nsdate,nstimer,countdown,nstimeinterval,Swift,Nsdate,Nstimer,Countdown,Nstimeinterval,我有“dd HH:mm:ss”格式的剩余时间,我必须从中运行倒计时。我正在使用这个代码 func updateCounter() { let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "dd HH:mm:ss" let date = dateFormatter.dateFromString(timerString) let timeLeft = date!.timeIntervalSi

我有“dd HH:mm:ss”格式的剩余时间,我必须从中运行倒计时。我正在使用这个代码

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)
}
用于更新标签

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

}

但是我没有得到正确的时间,请纠正我做错了什么。

因为您一直错误地使用了
NSDateFormatter
。首先,你的
timerString
中没有年份和月份,只有小时、分钟和秒。另一方面,你忘了调整时区

您的
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

因为您一直在错误地使用
NSDateFormatter
。首先,你的
timerString
中没有年份和月份,只有小时、分钟和秒。另一方面,你忘了调整时区

您的
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

什么是不正确的时间?你得到零或者总是2天?如果我在时间字符串中通过“122:26:20”,那么我在标签中得到“10957:16:57:22”,就像通过的天数是1,我得到10957天,这意味着时间不正确?你得到零或者总是2天?如果我在时间字符串中传递“122:26:20”,那么我在标签中得到“10957:16:57:22”,就像传递的天数是1,我得到的是10957天的时间,但我如何将其与计时器一起使用,这会改变timeLeft值?到目前为止,它只给出了“01:22:26:20”这是一个不同的问题。您在这里要问的是如何将字符串转换为秒数,但如何将其与更改timeLeft值的计时器一起使用?到目前为止,它只给出了“01:22:26:20”这是一个不同的问题。您在这里问的是如何将字符串转换为秒数