在x天后的特定时间创建NSDate

时间:2012-01-11 20:36:13

标签: iphone ios cocoa

我正在尝试学习Objective-C / iPhone SDK,现在我正在做一种使用本地通知播放的待办事项。

我有一个“ timeOfDay ”ivar从DatePicker存储为NSDate,而“ numberOfDays ”ivar存储为NSNumber。

当我按下特定按钮时,我希望从按下按钮开始,但在特定的 timeOfDay 时安排本地通知x numberOfDays

我似乎很容易将NSTimeInterval添加到当前日期,这样可以让我从当前时间安排通知 numberOfDays ,但添加timeOfDay功能会使其更复杂。

实现这一目标的正确方法是什么?

由于

3 个答案:

答案 0 :(得分:8)

使用NSDateComponents将时间间隔添加到现有日期,同时尊重用户当前日历的所有怪癖。

NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];

// Get the year, month and day of the current date
NSDateComponents *dateComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit| NSDayCalendarUnit) fromDate:[NSDate date]];

// Extract the hour, minute and second components from self.timeOfDay
NSDateComponents *timeComponents = [calendar components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:self.timeOfDay];

// Apply the time components to the components of the current day
dateComponents.hour = timeComponents.hour;
dateComponents.minute = timeComponents.minute;
dateComponents.second = timeComponents.second;

// Create a new date with both components merged
NSDate *currentDateWithTimeOfDay = [calendar dateFromComponents:dateComponents];

// Create new components to add to the merged date
NSDateComponents *futureComponents = [[NSDateComponents alloc] init];
futureComponents.day = [self.numberOfDays integerValue];
NSDate *newDate = [calendar dateByAddingComponents:futureComponents toDate:currentDateWithTimeOfDay options:0];

答案 1 :(得分:3)

有一种非常简单的方法可以做到这一点,不会涉及很多行代码。

int numDays = 5;
myDate = [myDate dateByAddingTimeInterval:60*60*24*numDays];

答案 2 :(得分:0)

+ (id)dateWithTimeInterval:(NSTimeInterval)seconds sinceDate:(NSDate *)date

这应该可以为您提供所需的信息。