Есть два метода для достижении этой цели. Первый, является быстрым и немного грязноватым. И второй, который более безопасен в расчетах.
Первый способ включает в себя просто добавление количества дней в секундах:NSDate *now = [NSDate date]; int daysToAdd = 50; // или 60 :-) NSDate *newDate1 = [now addTimeInterval:60*60*24*daysToAdd]; NSLog(@"Быстрый расчет: %@", newDate1);
Данный метод имеет ряд ограничений. Он не заботиться о переходе на летнее или зимнее время. Таким образом, Вы обходите границы DST, в конечном итоге получите результат, который расходится между желаемым результатом вычисления на один час и в худшем случае на день.
Таким образом, следующий метод использует класс NSDateComponents и григорианский календарь, чтобы правильно добавить количество дней и корректно рассчитать результат:
NSDate *now = [NSDate date]; int daysToAdd = 50; // или 60 :-) // используем NSDateComponents NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease]; [components setDay:daysToAdd]; // Используем календарь NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease]; NSDate *newDate2 = [gregorian dateByAddingComponents:components toDate:now options:0]; NSLog(@"Правильный расчет: %@", newDate2);
Функции даты в Objective-C являются чрезвычайно мощными, но время от времени их трудно понять, для людей, которые являются начинающими программистами.
0 коментарі:
Отправить комментарий