2011-05-03 7 views
0

내 응용 프로그램에서이 함수를 다루고 있습니다. 나는 다른 시대의 그래픽을 보여줘야한다. 이 기간은 현재 그래프를 스 와이프하여 선택합니다.NSDate 및 DateByAddingComponents 문제

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 

하지만 가장 큰 문제는있다 (2008 년 10 위).

이러한 작업을 위해 구현 된 코드가있다 :

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 개월마다 1 개월 씩 을 1 씩 감소시키는 것이 분명합니다. 당연히 2008-11-01에 도달하면 다음 날짜는 2008-09-30입니다.

시간대의 1 시간 차이는 시간대의 일광 절약 시간 때문입니다.

+0

시간에 대한 표시에 감사드립니다. 그 달 동안, 나는 하루 만에 어느 정도 줄어들 었는지 모르겠다. 나는 엔트리 클래스를 다시 읽는 것을 끝내었고 나는 그런 종류의 실수를 보지 못했다. 내가 dateComponents ([dateComponents setDay : 0], setMonth : 1, setYear : 0 다음에 dateByAddingComponents를 붙이면) 오류가 계속 실행됩니다 ... – clement

+0

사실, 사용 후 dateComponents를 0으로 설정해야했습니다. 그렇지 않으면 날짜 구성 요소에 대한 모든 수정 사항이 저장되고 다시 작성됩니다. – clement