Cómo agregar minutos a la hora actual en swift

Soy nuevo en Swift y estoy probando un progtwigdor. ¿Tengo seleccionada la hora de inicio y tengo que agregar 5 minutos (o múltiples) a la hora de inicio y mostrarla en un UILabel?

@IBAction func timePickerClicked(sender: UIDatePicker) { var dateFormatter = NSDateFormatter() dateFormatter.timeStyle = NSDateFormatterStyle.ShortStyle var dateStr = dateFormatter.stringFromDate(startTime.date) let sttime = dateStr startTimeDisplay.text = dateStr } // How to advance time by 5 minutes for each section based on the start time selected and display time // section 1 = start time + 5 // section 2 = start time + 10* 

Dos enfoques:

  1. Utilice el calendar:

    En Swift 3:

     let calendar = Calendar.current let date = calendar.date(byAdding: .minute, value: 5, to: startDate) 

    O en Swift 2:

     let calendar = NSCalendar.currentCalendar() let date = calendar.dateByAddingUnit(.Minute, value: 5, toDate: startDate, options: []) 
  2. Simplemente use dateByAddingTimeInterval para agregar una cierta cantidad de segundos.

    Por ejemplo, en Swift 3:

     let date = startDate.addingTimeInterval(5.0 * 60.0) 

    O en Swift 2:

     let date = startDate.dateByAddingTimeInterval(5.0 * 60.0) 

En resumen, dateByAddingTimeInterval es más fácil, pero si alguna vez llega a agregar días, meses, etc., desea usar los cálculos calendáricos porque los ajustes para el horario de verano, mientras que dateByAddingTimeInterval no lo hace.

Puede usar el método NSCalendar dateByAddingUnit para agregar cualquier NSCalendarUnit a cualquier date. Puede crear una extensión NSDate para agregar x minutos a la date de su UIDatePicker:

 extension NSDate { func add(#minutes: Int) -> NSDate! { return NSCalendar(calendarIdentifier: NSGregorianCalendar)!.dateByAddingUnit(NSCalendarUnit.CalendarUnitMinute, value: minutes, toDate: self, options: nil) } } 

Luego, puede usar su extensión de la siguiente manera:

 let section1 = startTime.date.add(minutes: 5) let section2 = startTime.date.add(minutes: 10) 

editar / actualizar:

Xcode 8 • Swift 3.0

 extension Date { func add(minutes: Int) -> Date { return Calendar(identifier: .gregorian).date(byAdding: .minute, value: minutes, to: self)! } } 

testings:

 Date().add(minutes: 10) // "Jun 14, 2016, 5:31 PM" 

Guarde esta pequeña extensión:

 extension Int { var seconds: Int { return self } var minutes: Int { return self.seconds * 60 } var hours: Int { return self.minutes * 60 } var days: Int { return self.hours * 24 } var weeks: Int { return self.days * 7 } var months: Int { return self.weeks * 4 } var years: Int { return self.months * 12 } } 

Luego utilícelo intuitivamente como:

 let threeDaysLater = TimeInterval(3.days) date.addingTimeInterval(threeDaysLater) 

Puede hacer aritmética de dates utilizando NSDateComponents . Por ejemplo:

 import Foundation let comps = NSDateComponents() comps.minute = 5 let cal = NSCalendar.currentCalendar() let r = cal.dateByAddingComponents(comps, toDate: NSDate(), options: nil) 

Es lo que ves cuando lo intentas en el patio de recreo.

introduzca la descripción de la imagen aquí

Swift 3:

 let minutes: TimeInterval = 1 * 60 let nowPlusOne = Date() + minutes 

NSDate.init con timeIntervalSinceNow :
Ex:

  let dateAfterMin = NSDate.init(timeIntervalSinceNow: (minutes * 60.0))