2012-07-28 22 views
4

我需要有一個事件重複每一個「季度」(我假設手段連升3個月約)重複的事件。所以,我可以預計這將移動日期(但事實並非如此):的iOS和Objective-C:每季度

NSDateComponents *component = [[NSDateComponents alloc] init]; // quarter 
    component.quarter = 1; 

    self.todoStartDate = [[NSCalendar currentCalendar] dateByAddingComponents: component toDate:self.todoStartDate options: 0]; 

這有什麼錯增加一個「季度」的日期?它可以在添加一天或一週時正常工作,但不能與「季度」一起使用。

+0

或許或者你可以簡單地使用四種不同的月份,如第一天一月,四月,七月和十月(取決於你是否特別使用公曆等) – dreamlax 2012-07-28 09:09:58

+0

謝謝。事情就是這樣:我不想對用戶設置的日曆做出假設。我寧願讓基礎課程來處理這個計算。但它似乎沒有這樣做,我無法找到更多的文件。 – 2012-07-28 09:17:42

回答

0

(我希望我能加入這個作爲applefreak的答案,這是一個相當不錯的,但等不允許在註釋標記格式化的評論。)

Apple's documentation for NSCalendar說:

由此API代表的某些日曆可能必須將其基本單元概念映射到年/月/周/日/ ...命名法。例如,由一年中4個季度組成的 日曆使用 個月單位來表示季度。

現在,這可能是一個更加清晰,但我認爲什麼蘋果的意思是,正常的日曆沒有「宿舍」在所有;他們只有幾年,幾個月(其中12個)和幾天。但是,你也可以繼承NSCalendar(或創建NSCalendar一個新的實例?),這樣一年只有4個月,然後再調用那些個「宿舍」,併爲這些亞類蘋果公司的利益預先定義的quarter屬性。這非常令人困惑;我敢打賭,蘋果的WTFery背後有一個很好的故事。

不管怎樣,我同意,你應該在年/月/日日期反正打交道,不與神話碴周圍applefreak「宿舍」。畢竟,那會是什麼,甚至意味着「增加」,比方說,兩個季度的3月31日,考慮到第三季度比第一季度短? (答案取決於這是閏年嗎?)

如果你真正想要的是「每年1月1日,4月1日,7月1日和10月1日發生的事件」,那麼你應該寫。甚至不用擔心「增加三個月」,這與「添加四分之一」相同的問題。

順便說一句,這裏的其他人都注意到了quarter WTF爲好。例如:I want to get a quarter value in NSDateComponents class

0

我面臨着同樣的問題,不知道爲什麼季度不起作用,那麼解決辦法通過更換月份季度* 3.下面演示瞭如何獲得三個季度落後:

 NSDateComponents *dayComponent = [[NSDateComponents alloc] init]; 
     NSCalendar *theCalendar = [NSCalendar currentCalendar]; 

     NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
     dateFormatter.dateFormat = @"QQQ yyyy"; 
     NSDate *currentDate = [NSDate date]; 

     for (int i = -2; i <= 0; i++) { 
      //dayComponent.quarter = i; 
      dayComponent.month = i*3; 

      NSDate *date = [theCalendar dateByAddingComponents:dayComponent toDate:currentDate options:0]; 

      NSString *dateString = [dateFormatter stringFromDate:date]; 

      NSLog(@"date = %@", dateString); 
     } 

我希望這一切都有所幫助。