Question

Je traite de cette fonction sur ma demande. Je dois montrer quelques différents graphiques de différentes périodes. La période est de choisir le graphique par glisser actuel.

J'ai quelques problèmes en utilisant les DateComponents. Quand je teste l'application, je montre la date éditée par les dateByAddingComponents, et il semble comme ça dans la console:

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

comme vous pouvez le voir, l'heure qui change parfois, mais le plus gros problème est qu'il ya rater un mois (le 10 dans l'année 2008).

Il y a le code mis en œuvre pour les actions:

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;
        }
    }

Comment puis-je résoudre ???

Était-ce utile?

La solution

Comment puis-je résoudre?

En étant plus prudent. A partir des journaux que vous nous montrez, il est clair que vous décrémentation la date de 1 mois et 1 jour à chaque fois. Alors, naturellement, lorsque vous atteignez 2008-11-01, la prochaine date est 2008-09-30.

La différence d'une heure dans le temps est en raison du temps de changement d'heure dans votre fuseau horaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top