2015-02-23 92 views
0

我正在嘗試做一些簡單的7天曆史繪圖。鑑於目前的NSDate.date,我想獲得對應於7天前的開始的NSDate。所以基本上是在今天早上0.00前的7天。從7天前開始獲取NSDate

我已經試過,如下:

// decompose the current date, do I need more component fields? 
NSDateComponents *comps = [NSCalendar.currentCalendar components: NSDayCalendarUnit fromDate: NSDate.date]; 
NSLog(@"components: %@", comps); 
// Back day up 7 days. Will this wrap appropriate across month/year boundaries? 
comps.day -= 7; 
NSDate *origin = comps.date; 
NSLog(@"new date: %@", origin); 

我認爲是由剛剛指定NSDayCalendarUnit,其他的事情會違約(如一天開始,等)。不幸的是,origin結束爲(null)。什麼是正確的方法來做到這一點?

回答

0

要構建新的日期,您不僅應該知道一天,還應該知道一個月和一年。所以你應該添加NSYearCalendarUnit | NSMonthCalendarUnit。你也應該設置日曆和NSDateComponents的實例的時區屬性:

NSDateComponents *comps = [NSCalendar.currentCalendar components: NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate: NSDate.date]; 
comps.calendar = NSCalendar.currentCalendar; 
comps.timeZone = [NSTimeZone timeZoneWithName:@"UTC"]; 
NSLog(@"components: %@", comps); 
// Back day up 7 days. Will this wrap appropriate across month/year boundaries? 
comps.day -= 7; 
NSDate *origin = comps.date; 
NSLog(@"new date: %@", origin); 
+0

我實際上希望日期是相對於當前時區。 IOW,如果我在PST中,我希望7天前在PST中開始一天。那個'.timeZone'制定者會幫助還是傷害那個? – 2015-02-24 16:32:15

+0

通過反覆試驗回答了我自己的問題。的確,我不想要'.timeZone'集。但'.calendar'是必需的。奇怪的是,你認爲返回組件的日曆會設置它的日曆,因爲它是從它派生出來的。 – 2015-02-24 16:40:46