iphone - programacion - ¿Cómo se calcula el día del año para una fecha específica en Objective-C?
swift button action (4)
Así que la solución que se me ocurrió es bastante clara y simple y no de ninguna manera complicada.
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"D"];
NSUInteger dayOfYear = [[formatter stringFromDate:[NSDate date]] intValue];
[formatter release];
return dayOfYear;
El truco aquí que pasé tanto tiempo descifrando fue usar NSDateFormatter. La "D" es la bandera del día del año.
Espero que esto haya sido útil para ustedes que tienen el mismo problema que yo.
Esto es algo que me encontré pasando horas para descubrir y, por lo tanto, quiero compartir con ustedes.
La pregunta era: ¿cómo determino el día del año para una fecha específica?
por ejemplo, el 15 de enero es el día 15 y el 31 de diciembre es el día 365 cuando no es un año bisiesto.
Con la clase NSDate . Use el mensaje timeIntervalSinceDate
. Le devolverá un valor NSTimeInterval (en realidad es un doble) que representa los segundos transcurridos desde la fecha que desea. Después de eso, es fácil convertir segundos a días.
Si truncas seconds/86400
te darán días.
Digamos que quieres días desde el 1 de enero de 2010.
// current date/time
NSDate *now = [[NSData alloc] init];
// seconds elapsed since January 1st 2010 00:00:00 (GMT -4) until now
NSInteval interval = [now timeIntervalSinceDate: [NSDate dateWithString:@"2010-01-01 00:00:00 -0400"]];
// days since January 1st 2010 00:00:00 (GMT -4) until now
int days = (int)interval/86400;
Prueba esto:
NSCalendar *gregorian =
[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSUInteger dayOfYear =
[gregorian ordinalityOfUnit:NSDayCalendarUnit
inUnit:NSYearCalendarUnit forDate:[NSDate date]];
[gregorian release];
return dayOfYear;
donde la date
es la fecha para la que desea determinar el día del año. La documentación sobre el método NSCalendar.ordinalityOfUnit está here .
Usando ARC y reemplazando símbolos en desuso, la respuesta de John Feminella sería así:
NSCalendar *greg = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
NSUInteger dayOfYear= [greg ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitYear forDate:[NSDate date]];