iphone - para - Objetivo C-obtener el día siguiente de hoy(mañana)
siri juego (3)
En iOS 8 hay un método conveniente en NSCalendar
llamado isDateInTomorrow
.
C objetivo
NSDate *date;
BOOL isTomorrow = [[NSCalendar currentCalendar] isDateInTomorrow:date];
Swift 3
let date: Date
let isTomorrow = Calendar.current.isDateInTomorrow(date)
Swift 2
let date: NSDate
let isTomorrow = NSCalendar.currentCalendar().isDateInTomorrow(date)
¿Cómo puedo verificar si una fecha es inherentemente MAÑANA?
No quiero agregar horas ni nada a una fecha como hoy, porque si hoy ya son las 22:59
, agregar demasiado pasaría al día siguiente, y agregar muy poco si la hora es 12:00
faltaría mañana .
¿Cómo puedo verificar dos NSDate
s y asegurarme de que uno sea el equivalente de mañana para el otro?
Es posible que pueda aprovechar NSCalendar
/ Calendar
para crear mañana:
extension Calendar {
var tomorrow: Date? {
return date(byAdding: .day, value: 1, to: startOfDay(for: Date()))
}
}
Usando NSDateComponents
puede extraer los componentes día / mes / año de la fecha que representa hoy, ignorando los componentes hora / minutos / segundos, agregar un día y reconstruir una fecha correspondiente a mañana.
Entonces, imagine que desea agregar exactamente un día a la fecha actual (incluida la información de horas / minutos / segundos igual a la fecha "ahora"), puede agregar un intervalo de tiempo de 24 * 60 * 60 segundos a "ahora" usando dateWithTimeIntervalSinceNow
, pero es mejor (y prueba de DST, etc.) hacerlo de esta manera usando NSDateComponents
:
NSDateComponents* deltaComps = [[[NSDateComponents alloc] init] autorelease];
[deltaComps setDay:1];
NSDate* tomorrow = [[NSCalendar currentCalendar] dateByAddingComponents:deltaComps toDate:[NSDate date] options:0];
Pero si desea generar la fecha correspondiente a mañana a la medianoche , podría simplemente recuperar los componentes mes / día / año de la fecha que representa ahora, sin parte de horas / min / seg , y agregar 1 día, luego reconstruir una fecha:
// Decompose the date corresponding to "now" into Year+Month+Day components
NSUInteger units = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
NSDateComponents *comps = [[NSCalendar currentCalendar] components:units fromDate:[NSDate date]];
// Add one day
comps.day = comps.day + 1; // no worries: even if it is the end of the month it will wrap to the next month, see doc
// Recompose a new date, without any time information (so this will be at midnight)
NSDate *tomorrowMidnight = [[NSCalendar currentCalendar] dateFromComponents:comps];
PD: Puede leer consejos realmente útiles y cosas sobre conceptos de fecha en la Guía de programación de fecha y hora , especialmente aquí sobre los componentes de fecha .