неділю, 16 березня 2014 р.

Добавить N-дней к NSDate

Есть два метода для достижении этой цели. Первый, является быстрым и немного грязноватым. И второй, который более безопасен в расчетах.
Первый способ включает в себя просто добавление количества дней в секундах:

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 являются чрезвычайно мощными, но время от времени их трудно понять, для людей, которые являются начинающими программистами.

Немає коментарів:

Дописати коментар

HyperComments for Blogger

comments powered by HyperComments