我过去使用以下函数使用NSDateComponents
将特定时间间隔添加到现有日期。
(NSDate *)dateByAddingComponents:(NSDateComponents *)comps
toDate:(NSDate *)date
options:(NSCalendarOptions)opts
从iOS8开始,NSDateComponents
已弃用周值,这意味着我无法实现我想要做的事情:通过向给定的{{添加特定周数来生成新的NSDate
1}}。
非常感谢任何帮助。
答案 0 :(得分:17)
只需使用weekOfYear
:
适用于NSDateComponents
week
的Apple文档:
弃用声明
请改用weekOfYear或weekOfMonth,具体取决于您的意图。
NSDate *date = [NSDate date];
NSDateComponents *comp = [NSDateComponents new];
comp.weekOfYear = 3;
NSDate *date1 = [[NSCalendar currentCalendar] dateByAddingComponents:comp toDate:date options:0];
NSLog(@"date: %@", date);
NSLog(@"date1: %@", date1);
输出:
date: 2015-01-13 04:06:26 +0000 date1: 2015-02-03 04:06:26 +0000
如果您使用week
,则会收到此警告:
'周'不推荐使用:首先在...中弃用 - 使用weekOfMonth或weekOfYear,具体取决于您的意思
使用weekOfMonth
或weekOfYear
作为delta时,它们的工作方式相同。它们不同的地方在于它们被用来获得星期数,在那里您将获得6个星期或一年中53周的星期。
答案 1 :(得分:9)
更新:正如Zaph在回答中所说,Apple实际上建议使用weekOfYear
或weekOfMonth
而不是我提供的答案。查看Zaph的答案以获取详细信息。
你可能很快就会意识到你正在过度思考它,但是这里有一些方法可以添加一定数周的日期,即使周价值被弃用,例如:
NSDateComponents *comp = [NSDateComponents new];
int numberOfDaysInAWeek = 7;
int weeks = 3; // <-- this example adds 3 weeks
comp.day = weeks * numberOfDaysInAWeek;
NSDate *date = [[NSCalendar currentCalendar] dateByAddingComponents:comp toDate:date options:0];
答案 2 :(得分:0)
我更喜欢使用dateByAddingUnit。它更直观
return [NSDate[[NSCalendar currentCalendar] dateByAddingUnit:NSCalendarUnitMonth value:3 toDate:toDate options:0];
答案 3 :(得分:-1)
您可以使用以下方法在NSDate上添加类别:
- (NSDate *) addWeeks:(NSInteger)weeks
{
NSCalendar *gregorian=[[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents *components=[[NSDateComponents alloc] init];
components.day = weeks * 7;
return [gregorian dateByAddingComponents:components toDate:self options:0];
}