Найти разницу в секундах между NSDates как целое число с помощью Swift
Я пишу кусок кода, где я хочу, чтобы время, как долго кнопка удерживается. Для этого я записал NSDate() когда кнопка была нажата, и попытался с помощью timeIntervalSinceDate функция, когда кнопка была отпущена. Кажется, это работает, но я не могу найти способ распечатать результат или переключить его на целое число.
var timeAtPress = NSDate() 
@IBAction func pressed(sender: AnyObject) {
    println("pressed")
    timeAtPress = NSDate()
}
@IBAction func released(sender: AnyObject) {
    println("released")
    var elapsedTime = NSDate.timeIntervalSinceDate(timeAtPress)
    duration = ???
}
Я видел несколько подобных вопросов, но я не знаю C, поэтому мне было трудно понять данные ответы. Если есть более эффективный способ узнать как долго кнопка была нажата, я открыт для предложений. Спасибо заранее.
5 ответов:
ваша попытка расчета
elapsedTimeнекорректно. В Свифт-3, это будет выглядеть так:let elapsed = Date().timeIntervalSince(timeAtPress)Примечание
()послеDateссылка. ЭлементDate()создает экземпляр нового объекта даты, а затемtimeIntervalSinceвозвращает разницу во времени между ним иtimeAtPress. Это вернет значение с плавающей запятой (технически, aTimeInterval).если вы хотите, чтобы это было усечено до
Intзначение, вы можете просто использовать:let duration = Int(elapsed)и, кстати, ваше определение элемент
timeAtPressпеременная не должна создавать экземпляр a
NSDate() и NSCalendar () звучат как хороший выбор. Используйте расчет календаря и оставьте фактическую математическую часть в рамках. Вот быстрый пример получения секунд между двумя
NSDate()let startDate = NSDate() let endDate = NSDate() let calendar = NSCalendar.currentCalendar() let dateComponents = calendar.components(NSCalendarUnit.CalendarUnitSecond, fromDate: startDate, toDate: endDate, options: nil) let seconds = dateComponents.second println("Seconds: \(seconds)")
согласно ответу Фредди, это функция в swift 3:
let start = Date() let enddt = Date(timeIntervalSince1970: 100) let calendar = Calendar.current let unitFlags = Set<Calendar.Component>([ .second]) let datecomponenets = calendar.dateComponents(unitFlags, from: start, to: enddt) let seconds = datecomponenets.second print("Seconds: \(seconds)")
вот как вы можете получить разницу в последней версии Swift 3
let calendar = NSCalendar.current var compos:Set<Calendar.Component> = Set<Calendar.Component>() compos.insert(.second) compos.insert(.minute) let difference = calendar.dateComponents(compos, from: fromDate, to: toDate) print("diff in minute=\(difference.minute!)") // difference in minute print("diff in seconds=\(difference.second!)") // difference in secondsссылки: получение разницы между двумя NSDates в (месяцы / дни / часы / минуты / секунды)
Для Swift 3 Секунды между 2 раз в "ЧЧ: мм"
func secondsIn(_ str: String)->Int{ var strArr = str.characters.split{ == ":"}.map(String.init) var sec = Int(strArr[0])! * 3600 var sec1 = Int(strArr[1])! * 36 print("sec") print(sec+sec1) return sec+sec1 }использование
var sec1 = secondsIn(shuttleTime) var sec2 = secondsIn(dateToString(Date())) print(sec1-sec2)