Найти разницу в секундах между 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)