NSDate и DateByAddingComponents проблема - PullRequest
0 голосов
/ 03 мая 2011

Я имею дело с этой функцией в моем приложении.Я должен показать несколько разных графиков из разных периодов.Период выбирается, проводя текущий график.

У меня есть некоторые проблемы с использованием DateComponents.Когда я тестирую приложение, я показываю дату, отредактированную dateByAddingComponents, и в консоли это выглядит так:

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

, как вы можете видеть, час меняется иногда, но самая большая проблема заключается вчто пропущен месяц (10-е число в 2008 году).

Для этих действий реализован код:

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

Как я могу это решить ???

1 Ответ

1 голос
/ 03 мая 2011

Как я могу решить это?

Будучи более осторожным.Из журналов, которые вы показываете нам, ясно, что вы уменьшаете дату на 1 месяц и 1 день каждый раз.Естественно, когда вы достигнете 2008-11-01, следующая дата - 2008-09-30.

Разница во времени на один час связана с переходом на летнее время в вашем часовом поясе.

...