2011-08-17 51 views
1

月份的我使用的是遞增的NSDate /遞減感謝NSDateCompoments:將首先的NSDate

dateComponents = [[NSDateComponents alloc] init]; 
    self.date = [gregorian dateByAddingComponents:dateComponents toDate:[NSDate date] options:0]; 

...

[dateComponents setDay:1]; 
        self.date = [gregorian dateByAddingComponents:dateComponents toDate:self.date options:0]; 
        [dateComponents setDay:0]; 

現在,我想設置當天將NSDate設置爲本月的第一個月(也是今年的第一個月),但我不知道該怎麼辦

非常感謝!

編輯:

NSDateComponents *dateComponentsSetFirst = [gregorian components:(NSYearCalendarUnit | 
                   NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:self.date]; 

    switch (self.segmentedControl.selectedSegmentIndex) { 
     case 0: 
      requestTy = @"hours"; 
      break; 
     case 1: 
      requestTy = @"days"; 
      NSLog (@"avant %@",self.date); 
      [dateComponents setDay:1]; 
      self.date = [gregorian dateFromComponents:dateComponentsSetFirst]; 
      [dateComponents setDay:0]; 
      NSLog (@"après %@",self.date); 
      break; 
     case 2: 
      requestTy = @"months"; 
      NSLog (@"before %@",self.date); 
      [dateComponents setMonth:1]; 
      self.date = [gregorian dateFromComponents:dateComponentsSetFirst]; 
      [dateComponents setMonth:0]; 
      NSLog (@"after : %@",self.date); 
      break; 
     default: 
      break; 
    } 

給我

2011-08-17 11:23:34.365 e-mars[20942:207] avant 2011-08-17 09:23:30 GMT 
2011-08-17 11:23:34.366 e-mars[20942:207] après 2011-08-16 22:00:00 GMT 

當我通過的情況下1!

2011-08-17 11:26:05.747 e-mars[20942:207] before 2011-08-16 22:00:00 GMT 
2011-08-17 11:26:05.747 e-mars[20942:207] after : 2011-08-16 22:00:00 GMT 
當我通過的情況下,2

+1

取代'[dateComponents setDay:1]'和'[dateComponentsSetFirst setDay:1]' – jrturton

+0

嗚嗚.... stuuupid ;-)我試圖用舊的日期部分... – clement

回答

2

您不添加組件到日期。您只需從給定日期初始化dateComponents,設置日期和月份(以及年份,如果需要),然後獲取dateFromComponents。 Apple Date and Time Programming Guide

NSDateComponents *dateComponents = [gregorian components:(NSYearCalendarUnit | 
NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:[NSDate date]]; 
[dateComponents setDay:1]; 
[dateComponents setMonth:1]; 
self.date = [gregorian dateFromComponents:dateComponents]; 
+0

顯然,它不起作用:'(它使我在1901年12月... ^^ – clement

+0

您是否從日期初始化dateComponents? –

+0

我編輯了我的第一篇文章,self.date是日期。我已經把工作顯然不工作...日期沒有設置爲第一 – clement