我试图做一些简单的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)
。这样做的正确方法是什么?
答案 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);