Pregunta

Estoy teniendo problemas con la adición de los valores de fechas y también conseguir diferencias entre fechas. Las fechas y los componentes calculados son incorrectos.

Así que para añadir, si añado 1,5 meses, solo me dan 1 mes, sin embargo si añado cualquier número entero es decir, (1 o 2 o 3 y etc) se calcula correctamente.

Float32 addAmount = 1.5;

NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
[components setMonth:addAmount];

NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
 [gregorian setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];

 NSDate *newDate2 = [gregorian dateByAddingComponents:components toDate:Date1 options:0];

Ahora la diferencia, si tengo una fecha que se ha añadido con exactamente un año (casi el mismo código que el anterior), se añade correctamente, pero cuando se calcula la diferencia, me sale 0 años, 11 meses y 30 días.

NSDate *startDate = Date1;
NSDate *endDate = Date2;

NSCalendar *gregorian = [[NSCalendar alloc]
          initWithCalendarIdentifier:NSGregorianCalendar];
[gregorian setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];

NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;

NSDateComponents *components = [gregorian components:unitFlags
              fromDate:startDate
                toDate:endDate options:0];

NSInteger years = [components year];
NSInteger months = [components month];
NSInteger days = [components day];

¿Qué estoy haciendo mal? También he añadido la constanct kCFCalendarComponentsWrap en las opciones para ambas funciones suma y diferencia, pero sin diferencias.

Gracias

¿Fue útil?

Solución

  

Así que para añadir, si añado 1,5 meses,   sólo se obtiene 1 mes, sin embargo si añado cualquier   es decir, número entero (1 o 2 o 3 y etc)   se calcula correctamente.

El método setMonth: en NSDateComponents toma un NSInteger, no un número de coma flotante. Por lo que el comportamiento es correcto, ya que es simplemente truncar el 1,5 a 1.

  

Ahora la diferencia, si tengo una fecha   que se ha añadido con exactamente un   año (casi mismo código que el anterior), se   agrega correctamente, pero cuando el   se calcula la diferencia, consigo 0   años, 11 meses y 30 días.

A menos que usted muestra el código de cómo se crean las variables FECHA1 y FECHA2, no hay manera verdadera de decir.

(También está perdiendo memoria anteriormente;. Siempre coincidir con un alloc con un release / autorelease y tratar de no dar sus cartas variables de capital, ya que, como una cuestión de estilo, que sólo debe ser hecho por los nombres de clase)

Otros consejos

Finalmente encontré el problema con la diferencia de fechas, cuando estaba guardando a una db, solía timeintervalsince1970 con un valor doble, pero cuando poblarlo y se establece a un selector de fechas, que estaba usando un tipo de columna int.

Gracias lanudo de la rana para mí de dirección en la dirección correcta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top