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

5 ответов:

ваша попытка расчета elapsedTime некорректно. В Свифт-3, это будет выглядеть так:

let elapsed = Date().timeIntervalSince(timeAtPress)

Примечание () после Date ссылка. Элемент Date() создает экземпляр нового объекта даты, а затем timeIntervalSince возвращает разницу во времени между ним и timeAtPress. Это вернет значение с плавающей запятой (технически, a TimeInterval).

если вы хотите, чтобы это было усечено до 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)