Грубый, но простой в коде способ - добавить / вычесть секунды из NSDate
напрямую:
NSDate *hourLaterDate = [date dateByAddingTimeInterval: 60*60];
NSDate *hourEarlierDate = [date dateByAddingTimeInterval: -60*60];
. Вы можете увидеть, как это работает, зарегистрировав даты:
NSDate *now = [NSDate date];
NSDate *hourLaterDate = [now dateByAddingTimeInterval: 60*60];
NSLog(@"%@ => %@", now, hourLaterDate);
В этом подходе дата интерпретируется как количество секунд с базовой даты.Итак, внутренне это просто большое число типа double
.
Утомительно кодировать, но педантично правильный способ сделать эти вычисления, интерпретируя даты как даты, выраженные в календарной системе.То же, что и в календарных расчетах:
NSDateComponents *hour = [[NSDateComponents alloc] init];
[hour setHour: 1];
NSCalendar *calendar= [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar];
NSDate *hourLaterDate = [calendar dateByAddingComponents: hour
toDate: date
options: 0];
[hour release];
[calendar release];
В этих расчетах учитываются часовые пояса, переход на летнее время, високосные годы и т. Д. Они также могут быть более выразительными с точки зрения вычислений.
Прежде чем использовать любой из этих подходов, вы должны решить, что именно вам нужно: отметка времени или полноценная календарная дата.