fecha - swift 3 change navigation bar title color
¿Cómo cambiar las horas y los minutos del día actual en Swift? (2)
Si creo una Date()
para obtener la fecha y la hora actuales, quiero crear una nueva fecha a partir de eso, pero con diferentes horas, minutos y cero segundos, ¿cuál es la forma más fácil de hacerlo utilizando Swift? He estado encontrando tantos ejemplos con "obtener" pero no "configurar".
Swift extensión de 3 fechas con zona horaria
extension Date {
public func setTime(hour: Int, min: Int, sec: Int, timeZoneAbbrev: String = "UTC") -> Date? {
let x: Set<Calendar.Component> = [.year, .month, .day, .hour, .minute, .second]
let cal = Calendar.current
var components = cal.dateComponents(x, from: self)
components.timeZone = TimeZone(abbreviation: timeZoneAbbrev)
components.hour = hour
components.minute = min
components.second = sec
return cal.date(from: components)
}
}
Tenga en cuenta que para los entornos locales que utilizan el horario de verano, es posible que algunas horas no existan en los días de cambio de reloj o que se produzcan dos veces. Ambas soluciones a continuación devuelven una Date?
y usar fuerza de desenvolvimiento. Debes manejar posibles nil
en tu aplicación.
Swift 3, 4 y iOS 8 / OS X 10.9 o posterior
let date = Calendar.current.date(bySettingHour: 9, minute: 30, second: 0, of: Date())!
Swift 2
Utilice NSDateComponents
/ DateComponents
:
let gregorian = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
let now = NSDate()
let components = gregorian.components([.Year, .Month, .Day, .Hour, .Minute, .Second], fromDate: now)
// Change the time to 9:30:00 in your locale
components.hour = 9
components.minute = 30
components.second = 0
let date = gregorian.dateFromComponents(components)!
Tenga en cuenta que si llama a print(date)
, la hora impresa está en UTC. Es el mismo momento en el tiempo, solo se expresa en una zona horaria diferente a la tuya. Use un NSDateFormatter
para convertirlo a su hora local.