2011-05-03 58 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個月。很自然,當你到達2008-11-01時,下一個日期是2008-09-30。

時間差一小時是因爲您所在時區的夏令時。

+0

感謝您對小時的指示。在這個月裏,我不知道我在哪一天減少了...我完成重新閱讀entiere類,我沒有看到任何類似的錯誤。當我強制dateComponents([dateComponents setDay:0],setMonth:1和setYear:0後跟一個dateByAddingComponents)時,該錯誤仍然運行... – clement 2011-05-03 10:08:47

+0

事實上,我必須在使用它之後將dateComponents設置爲0,if不是,所有關於datecomponent的修改都將被保存和刪除/重新創建 – clement 2011-05-05 08:54:45