2015-04-06 7 views
47

hinzufügen Ich bin neu in Swift und versuche einen Scheduler. Ich habe die Startzeit ausgewählt und muss 5 Minuten (oder ein Vielfaches davon) zur Startzeit hinzufügen und sie in einem UILabel anzeigen lassen.Wie Minuten in der aktuellen Zeit in Swift

@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* 

Antwort

141

zwei Ansätze:

  1. Kalender benutzen:

    In Swift 3:

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

    Oder in Swift 2:

    let calendar = NSCalendar.currentCalendar() 
    let date = calendar.dateByAddingUnit(.Minute, value: 5, toDate: startDate, options: []) 
    
  2. Verwenden Sie einfach dateByAddingTimeInterval, um eine bestimmte Anzahl von Sekunden hinzuzufügen.

    Zum Beispiel in Swift 3:

    let date = startDate.addingTimeInterval(5.0 * 60.0) 
    

    Oder in Swift 2:

    let date = startDate.dateByAddingTimeInterval(5.0 * 60.0) 
    

Unterm Strich ist dateByAddingTimeInterval am einfachsten, aber wenn Sie schon einmal in das Hinzufügen von Tagen, Monaten erhalten usw. möchten Sie die kalendarischen Berechnungen verwenden, da diese sich auf die Sommerzeit anpassen, während dateByAddingTimeInterval dies nicht tut.

16

Sie können Kalender-Methode func date(byAdding component: Calendar.Component, value: Int, to date: Date, wrappingComponents: Bool = default) -> Date? nutzen jede Calendar.Component einem Date hinzuzufügen. Sie können ein Datum Erweiterung erstellen, um x Minuten zu Ihrem UIDatePicker ‚s Datum hinzufügen:

Xcode 8 und Xcode 9 • Swift 3.0 und Swift 4,0

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

Dann können Sie einfach benutzen, um Ihre Erweiterung wie folgt:

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

Spielplatz-Test ing:

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

sicher, dass ich bald, gerade beendete meine App swift3 Portierung aber havent abgeschlossen Testen es –

+0

@DanBeaulieu getan –

+0

Under Unter welchen Umständen kehrt '.date (byAdding: value: to)' nil' zurück? Ist es sicher, dass wir hier etwas auspacken müssen? – Deco

2

Sie können die Datumsarithmetik mit NSDateComponents ausführen.Zum Beispiel:

import Foundation 

let comps = NSDateComponents() 

comps.minute = 5 

let cal = NSCalendar.currentCalendar() 

let r = cal.dateByAddingComponents(comps, toDate: NSDate(), options: nil) 

Es ist das, was Sie sehen, wenn Sie es auf dem Spielplatz versuchen

enter image description here

1

NSDate.init mit timeIntervalSinceNow:
Ex:

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

speichern diese kleine Erweiterung:

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

dann verwenden, intuitiv wie:

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

Swift 3:

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

Swift 4:

// fügen Sie 5 Minuten zum Zeitpunkt

let date = startDate.addingTimeInterval(TimeInterval(5.0 * 60.0)) 

// subtrahieren 5 Minuten vom Datum

let date = startDate.addingTimeInterval(TimeInterval(-5.0 * 60.0)) 
0

Falls Sie Unix-Zeitstempel

 let now : Date = Date() 
     let currentCalendar : NSCalendar = Calendar.current as NSCalendar 

     let nowPlusAddTime : Date = currentCalendar.date(byAdding: .second, value: accessTime, to: now, options: .matchNextTime)! 

     let unixTime = nowPlusAddTime.timeIntervalSince1970 
Verwandte Themen