Создать NSDate в определенное время через x дней - PullRequest
2 голосов
/ 12 января 2012

Я пытаюсь выучить Objective-C / iPhone SDK, и сейчас я делаю своеобразное приложение, играющее с локальными уведомлениями.

У меня есть ивар " timeOfDay ", сохраненный как NSDate от DatePicker, и " numberOfDays ", сохраненный как NSNumber.

Когда я нажимаю определенную кнопку, я хотел бы запланировать локальное уведомление x numberOfDays с момента нажатия кнопки, но в определенный timeOfDay .

Кажется, я легко добавляю NSTimeInterval к ​​текущей дате, который дал бы мне возможность запланировать уведомление numberOfDays от текущего времени, но добавление функции timeOfDay делает его более сложным.

Каков был бы правильный способ достижения этого?

Спасибо

Ответы [ 3 ]

8 голосов
/ 12 января 2012

Используйте 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];
3 голосов
/ 12 января 2012

Есть довольно простой способ сделать это, который не будет включать столько строк кода.

int numDays = 5;
myDate = [myDate dateByAddingTimeInterval:60*60*24*numDays];
0 голосов
/ 12 января 2012
+ (id)dateWithTimeInterval:(NSTimeInterval)seconds sinceDate:(NSDate *)date

Это должно дать вам то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...