Pregunta

Estoy tratando sobre esta función en mi aplicación. Tengo que mostrar algunos gráficos diferentes de diferentes períodos. El período se elige deslizando el gráfico actual.

Tengo algunos problemas usando Datecomponents. Cuando estoy probando la aplicación, muestro la fecha editada por DatyByAddingComponents, y parece eso en la consola:

Date : 2009-12-14 10:06:13 GMT
Date : 2009-11-13 10:06:13 GMT
Date : 2009-10-12 09:06:13 GMT
Date : 2009-09-11 09:06:13 GMT
Date : 2009-08-10 09:06:13 GMT
Date : 2009-07-09 09:06:13 GMT
Date : 2009-06-08 09:06:13 GMT
Date : 2009-05-07 09:06:13 GMT
Date : 2009-04-06 09:06:13 GMT
Date : 2009-03-05 10:06:13 GMT
Date : 2009-02-04 10:06:13 GMT
Date : 2009-01-03 10:06:13 GMT
Date : 2008-12-02 10:06:13 GMT
Date : 2008-11-01 10:06:13 GMT
Date : 2008-09-30 09:06:13 GMT
Date : 2008-08-29 09:06:13 GMT

Como puede ver, la hora cambia a veces, pero el mayor problema es que se pierde un mes (el décimo en el año 2008).

Existe el código implementado para esas acciones:

if (currentPosition.x > gestureStartPoint.x) {
        switch (self.segmentedControl.selectedSegmentIndex) {
            case 0:
                [dateComponents setDay:-1];
                self.date = [gregorian dateByAddingComponents:dateComponents toDate:self.date options:0];
                NSLog(@"Date : %@", date);
                break;
            case 1:
                //NSLog(@"before : %@", date);
                [dateComponents setMonth:-1];
                self.date = [gregorian dateByAddingComponents:dateComponents toDate:self.date options:0];
                NSLog(@"Date : %@", date);
                break;
            case 2:
                //NSLog(@"before : %@", date);
                [dateComponents setYear:-1];
                self.date = [gregorian dateByAddingComponents:dateComponents toDate:self.date options:0];
                NSLog(@"Date : %@", date);
                break;
            default:
                break;
        }

    }
    else if(currentPosition.x <= gestureStartPoint.x){
        switch (self.segmentedControl.selectedSegmentIndex) {
            case 0:
                [dateComponents setDay:1];
                self.date = [gregorian dateByAddingComponents:dateComponents toDate:self.date options:0];
                NSLog(@"Date : %@", date);
                break;
            case 1:
                [dateComponents setMonth:1];
                self.date = [gregorian dateByAddingComponents:dateComponents toDate:self.date options:0];
                NSLog(@"Date : %@", date);
                break;
            case 2:
                [dateComponents setYear:1];
                self.date = [gregorian dateByAddingComponents:dateComponents toDate:self.date options:0];
                NSLog(@"Date : %@", date);
                break;
            default:
                break;
        }
    }

¿¿¿Cómo puedo resolverlo???

¿Fue útil?

Solución

¿Cómo puedo resolverlo?

Por ser más cuidadoso. De los registros que nos muestra, está claro que está disminuyendo la fecha en 1 mes y 1 día cada vez. Entonces, naturalmente, cuando llega al 2008-11-01, la siguiente fecha es 2008-09-30.

La diferencia de una hora en el tiempo se debe al tiempo de ahorro de verano en su zona horaria.

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