从7天前开始获取NSDate

时间:2015-02-23 20:17:10

标签: ios objective-c nsdate

我试图做一些简单的7天历史绘图。鉴于当前NSDate.date,我希望获得与7天前的一天开始相对应的NSDate。所以基本上是今天早上0.00前7天。

我尝试过的是以下内容:

// 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)。这样做的正确方法是什么?

1 个答案:

答案 0 :(得分: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);