2011-02-27 103 views
15

我試圖得到一個NSDate對象的小時,分​​鍾和第二初始化爲0. 我使用下面的代碼來獲取它,但出於某種原因,我從[NSDateComponents日期]。 我的代碼有什麼問題?NSDateComponents返回零

NSCalendar *gregorian = [[[NSCalendar alloc] 
          initWithCalendarIdentifier:NSGregorianCalendar] autorelease]; 

NSDate *now = [[[NSDate alloc] init] autorelease]; 
NSDateComponents *nowDc = [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) 
     fromDate:now]; 
// this returns nil! 
NSDate *todayStart = [nowDc date]; 

回答

34

當您從日曆實例中獲取組件時,未設置NSDateComponents實例的日曆。

但是你要設置日曆,您可以使用[components date]之前,因爲沒有日曆,沒有日期。

因此,請嘗試添加[nowDc setCalendar:gregorian];

+0

好的,它在文檔中說什麼?多惱人的實現。 – Ovesh 2011-02-27 13:11:00

+2

它沒有明確說明。但是這貫穿了日期編程指南。 NSDate(作爲時間點)和日月之間的區別非常重要。由於同樣的原因,沒有[NSDate dateWithYear:month:date]方法。如果沒有NSCalendar,那麼每月和每年都沒有意義。 – 2011-02-27 14:19:36

+0

非常有幫助,謝謝! – 2014-10-21 20:26:19