Как добавить минут к текущему времени в быстром
Я новичок в 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*
Ответы
Ответ 1
Два подхода:
Использовать календарь:
В 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
- нет.
Ответ 2
Вы можете использовать метод календаря
func date(byAdding component: Calendar.Component, value: Int, to date: Date, wrappingComponents: Bool = default) -> Date?
добавить любой 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)!
}
}
Затем вы можете просто использовать метод расширения, чтобы добавить минуты отправителю (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"
Ответ 3
Swift 4:
//добавляем 5 минут к дате
let date = startDate.addingTimeInterval(TimeInterval(5.0 * 60.0))
//вычитаем 5 минут от даты
let date = startDate.addingTimeInterval(TimeInterval(-5.0 * 60.0))
Swift 5.1:
// subtract 5 minutes from date
transportationFromDate.addTimeInterval(TimeInterval(-5.0 * 60.0))
Ответ 4
Сохраните это небольшое расширение:
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)
Ответ 5
Вы можете выполнить арифметику даты с помощью NSDateComponents
. Например:
import Foundation
let comps = NSDateComponents()
comps.minute = 5
let cal = NSCalendar.currentCalendar()
let r = cal.dateByAddingComponents(comps, toDate: NSDate(), options: nil)
Это то, что вы видите, когда пытаетесь на игровой площадке.
![enter image description here]()
Ответ 6
NSDate.init
с помощью timeIntervalSinceNow
:
Пример:
let dateAfterMin = NSDate.init(timeIntervalSinceNow: (minutes * 60.0))
Ответ 7
Swift 3:
let minutes: TimeInterval = 1 * 60
let nowPlusOne = Date() + minutes
Ответ 8
Если вам нужна метка времени Unix
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