Trabajar con NSCalendar: obtener el próximo primer martes de un mes
-
22-09-2019 - |
Pregunta
Esto es un poco extraño, pero ¿es posible usar un nscalendar (o cualquier componente, para el caso) para descubrir cuál sería la fecha del próximo "primer martes del mes"?
Por ejemplo, hoy es el jueves 25 de marzo de 2010. El próximo "primer martes del mes" sería el 6 de abril. Del mismo modo, si estuviera buscando el próximo "primer martes del mes" el 1 de abril, aún sería el 6 de abril.
¿Cómo harías esto?
¡¡¡¡¡Muchas gracias!!!!!
Solución
El siguiente código calcula el primer martes de una combinación de mes/año determinado. Está escrito en Macruby Debido a que eso es con lo que lo intenté, pero no deberías tener problemas para convertirlo en Objetivo-C adecuado, es solo una sintaxis diferente (me encanta MacRuby para probar rápidamente una idea):
dc = NSDateComponents.alloc.init
# Set month to April 2010
dc.setYear 2010
dc.setMonth 4
dc.setWeekday 3 # 1 = Sunday, 2 = Monday, ...
dc.setWeekdayOrdinal 1 # We want the first weekday of the month
cal = NSCalendar.alloc.initWithCalendarIdentifier NSGregorianCalendar
date = cal.dateFromComponents dc
date.description # => "2010-04-06 00:00:00 +0200"
Le dejo que determine el "próximo primer martes" desde una fecha determinada: primero haga el cálculo para el mes de la fecha actual y si el resultado está en el pasado, hazlo nuevamente para el mes siguiente. Usar -[NSCalendar components:fromDate:]
Para obtener el combo mes/día de un NSDate determinado.
Otros consejos
Desafortunadamente, no puedo verificar la incapacidad de este código, pero algunos deberían verse así:
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setWeekday:2]; // Monday
[components setMonth:5]; // May
[components setYear:2008];
[components setWeekdayOrdinal:1]
NSCalendar *gregorian = [[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *date = [gregorian dateFromComponents:components];
Para muestras e información de detalle, consulte esto guía