Первый способ включает в себя просто добавление количества дней в секундах:
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]; [components setDay:daysToAdd]; // Используем календарь NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDate *newDate2 = [gregorian dateByAddingComponents:components toDate:now options:0]; NSLog(@"Правильный расчет: %@", newDate2);Функции даты в Objective-C являются чрезвычайно мощными, но время от времени их трудно понять, для людей, которые являются начинающими программистами.
Немає коментарів:
Дописати коментар