从 7 天前开始获取 NSDate
Get NSDate from start of 7 days ago
我正在尝试绘制一些简单的 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)
。正确的做法是什么?
要构造一个新日期,您不仅要知道日期,还要知道月份和年份。所以你应该添加 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);
我正在尝试绘制一些简单的 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)
。正确的做法是什么?
要构造一个新日期,您不仅要知道日期,还要知道月份和年份。所以你应该添加 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);