如何在swift中添加分钟到当前时间

try*_*dee 92 date ios swift

我是Swift的新手,正在尝试调度程序.我选择了开始时间,我需要在开始时间加5分钟(或它的倍数)并将其显示在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*
Run Code Online (Sandbox Code Playgroud)

Rob*_*Rob 241

两种方法:

  1. 使用日历:

    在Swift 3及更高版本中:

    let calendar = Calendar.current
    let date = calendar.date(byAdding: .minute, value: 5, to: startDate)
    
    Run Code Online (Sandbox Code Playgroud)

    或者,在Swift 2中:

    let calendar = NSCalendar.currentCalendar()
    let date = calendar.dateByAddingUnit(.Minute, value: 5, toDate: startDate, options: [])
    
    Run Code Online (Sandbox Code Playgroud)
  2. 只需使用dateByAddingTimeInterval添加一定的秒数.

    例如,

    Swift 3或更高版本:

    let date = startDate.addingTimeInterval(5.0 * 60.0)
    
    Run Code Online (Sandbox Code Playgroud)

    斯威夫特2:

    let date = startDate.dateByAddingTimeInterval(5.0 * 60.0)
    
    Run Code Online (Sandbox Code Playgroud)

底线addingTimeInterval是最简单的,但如果你想增加几天,几个月等,你想要使用日历计算,因为那些调整为夏令时,而dateByAddingTimeInterval不是.

  • “addingTimeInterval”无疑具有更高的性能(尽管可能并不重要,除非您执行了数百万次)。但更重要的是,如果您谈论的是天(或更长时间)的计量单位,那么日历再现是更可取的,因为它将为您完成所有夏令时调整。 (4认同)

Leo*_*bus 37

您可以使用Calendar的方法

func date(byAdding component: Calendar.Component, value: Int, to date: Date, wrappingComponents: Bool = default) -> Date?
Run Code Online (Sandbox Code Playgroud)

添加任何Calendar.Component任何Date.您可以创建日期扩展名以将x分钟添加到您UIDatePicker的日期:

Xcode 8和Xcode 9•Swift 3.0和Swift 4.0

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

然后,您可以使用扩展方法向发件人添加分钟(UIDatePicker):

let section1 = sender.date.adding(minutes: 5)
let section2 = sender.date.adding(minutes: 10)
Run Code Online (Sandbox Code Playgroud)

游乐场测试:

Date().adding(minutes: 10)  //  "Jun 14, 2016, 5:31 PM"
Run Code Online (Sandbox Code Playgroud)

  • 文档不清楚如何返回 nil。这个问题解释了它,你是对的,这里是完全安全的。/sf/ask/2755069201/ (3认同)

Gil*_*man 15

斯威夫特4:

//添加5分钟到目前为止

let date = startDate.addingTimeInterval(TimeInterval(5.0 * 60.0))
Run Code Online (Sandbox Code Playgroud)

//从日期开始减去5分钟

let date = startDate.addingTimeInterval(TimeInterval(-5.0 * 60.0))
Run Code Online (Sandbox Code Playgroud)


小智 10

extension Date {
    func withAddedMinutes(minutes: Double) -> Date {
         addingTimeInterval(minutes * 60)
    }

    func withAddedHours(hours: Double) -> Date {
         withAddedMinutes(minutes: hours * 60)
    }
}
Run Code Online (Sandbox Code Playgroud)

用例

let anHourFromNow = Date().withAddedHours(hours: 1)
let aMinuteFromNow = Date().withAddedMinutes(minutes: 1)
Run Code Online (Sandbox Code Playgroud)


Ena*_*que 6

您可以在 swift 4 或 5 中使用

    let date = Date()
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd H:mm:ss"
    let current_date_time = dateFormatter.string(from: date)
    print("before add time-->",current_date_time)

    //adding 5 miniuts
    let addminutes = date.addingTimeInterval(5*60)
    dateFormatter.dateFormat = "yyyy-MM-dd H:mm:ss"
    let after_add_time = dateFormatter.string(from: addminutes)
    print("after add time-->",after_add_time)
Run Code Online (Sandbox Code Playgroud)

输出:

before add time--> 2020-02-18 10:38:15
after add time--> 2020-02-18 10:43:15
Run Code Online (Sandbox Code Playgroud)


Fit*_*syu 5

保存这个小扩展:

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
 }
}
Run Code Online (Sandbox Code Playgroud)

然后直观地使用它:

let threeDaysLater = TimeInterval(3.days)
date.addingTimeInterval(threeDaysLater)
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,月份和年份是不正确的。7 * 4 * 12 = 336,这远小于 365。 (3认同)
  • 由于上面列出的所有原因,您绝对不应该使用它,它在许多不同的情况下都是不准确的。使用内置的数据算术函数 (2认同)