Как добавить минуты к текущему времени в 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*
8 ответов:
два подхода:
используйте календарь:
в Swift 3 и более поздних версиях:
let calendar = Calendar.current let date = calendar.date(byAdding: .minute, value: 5, to: startDate)
или, в Swift 2:
let calendar = NSCalendar.currentCalendar() let date = calendar.dateByAddingUnit(.Minute, value: 5, toDate: startDate, options: [])
просто использовать
dateByAddingTimeInterval
добавить определенное количество секунд.например,
Swift 3 или более поздней версии:
let date = startDate.addingTimeInterval(5.0 * 60.0)
Swift 2:
let date = startDate.dateByAddingTimeInterval(5.0 * 60.0)
нижняя линия,
addingTimeInterval
это проще всего, но если вы когда-нибудь доберетесь до добавления дней, месяцев и т. д. вы хотите чтобы использовать календарные расчеты, потому что они корректируются на летнее время, в то время какdateByAddingTimeInterval
нет.
вы можете использовать метод календаря
func date(byAdding component: Calendar.Component, value: Int, to date: Date, wrappingComponents: Bool = default) -> Date?
добавить любые
Calendar.Component
любойDate
. Вы можете создать расширение даты, чтобы добавить x минут к вашемуUIDatePicker
's дата: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)! } }
затем вы можете просто использовать метод расширения, чтобы добавить минуты к отправителю (UIDatePicker):
let section1 = sender.date.adding(minutes: 5) let section2 = sender.date.adding(minutes: 10)
площадка для испытаний:
Date().adding(minutes: 10) // "Jun 14, 2016, 5:31 PM"
сохраните это небольшое расширение:
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 } }
тогда используйте его интуитивно, как:
let threeDaysLater = TimeInterval(3.days) date.addingTimeInterval(threeDaysLater)
Swift 4:
/ / добавить 5 минут до даты
let date = startDate.addingTimeInterval(TimeInterval(5.0 * 60.0))
/ / вычтите 5 минут от даты
let date = startDate.addingTimeInterval(TimeInterval(-5.0 * 60.0))
вы можете сделать арифметику даты с помощью
NSDateComponents
. Например:import Foundation let comps = NSDateComponents() comps.minute = 5 let cal = NSCalendar.currentCalendar() let r = cal.dateByAddingComponents(comps, toDate: NSDate(), options: nil)
это то, что вы видите, когда вы пытаетесь его в детской площадке
NSDate.init
СtimeIntervalSinceNow
:
Например:let dateAfterMin = NSDate.init(timeIntervalSinceNow: (minutes * 60.0))
в случае, если вы хотите unix timestamp
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