Как найти дату на третий день с текущей даты iphone/ipad

67
9

Может ли кто-нибудь сказать, как найти дату на третий день с текущей даты iphone/ipad.


Заранее спасибо

спросил(а) 2010-11-11T14:47:00+03:00 9 лет, 7 месяцев назад
1
Решение
121

выберите один:


NSDate *futureDate;
NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
[components setDay:3];
futureDate = [[NSCalendar currentCalendar] dateByAddingComponents:components toDate:[NSDate date] options:0];
NSLog(@"%@ - %@", [NSDate date], futureDate);

NSDate *futureDate = [[NSDate date] dateByAddingTimeInterval:3 * (24*60*60)];

ответил(а) 2010-11-11T14:54:00+03:00 9 лет, 7 месяцев назад
95

Вы можете использовать это:


NSDate *today = [[NSDate alloc] init];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];
[offsetComponents setDay:3];
NSDate *threeDaysFromToday = [gregorian dateByAddingComponents:offsetComponents toDate:today options:0];

Немного измененный пример из Собственная документация Apple по NSDate. Проверьте ссылку для получения дополнительной информации и других примеров.

ответил(а) 2010-11-11T14:55:00+03:00 9 лет, 7 месяцев назад
39

Вот пример кода

    NSDate  * currentDate=[NSDate date];
NSTimeInterval interval=[currentDate timeIntervalSince1970];
NSTimeInterval intervalForThirdDate=interval+86400*3;
NSDate *nextDate=[[NSDate alloc]initWithTimeIntervalSince1970:intervalForThirdDate];

ответил(а) 2010-11-11T14:58:00+03:00 9 лет, 7 месяцев назад
39

[NSDate dateWithTimeIntervalSinceNow:86400*3]

Но, как упоминалось выше, DST может сделать это слишком неточным. Зависит от того, насколько это важно.

ответил(а) 2010-11-11T14:55:00+03:00 9 лет, 7 месяцев назад
39

Что-то вроде:


// get the gregorian calendar ready to go; use the getter for the current system
// calendar if you're happy to deal with other calendars too
NSCalendar *gregorianCalendar = [[NSCalendar alloc]
initWithCalendarIdentifier: NSGregorianCalendar];

// get an NSDate object that is three days in the future
NSDate *dateInFuture = [NSDate dateWithTimeIntervalSinceNow:3*24*60*60];

// grab the date components for the bits we want to print in this example
NSDateComponents *componentsOfDateInFuture =
[gregorianCalendar
components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit
fromDate:dateInFuture];

// and print
NSLog(@"in three days it'll be %04d/%02d/%02d",
componentsOfDateInFuture.year,
componentsOfDateInFuture.month,
componentsOfDateInFuture.day);

// clean up
[gregorianCalendar release];


РЕДАКТИРОВАТЬ: ответ Пабло Санта-Крус лучше для того, чтобы обеспечить вам три дня в будущем, учитывая проблемы с дневным сбережением. Вот как вы разложили NSDate на день/месяц/год, хотя для целей даты, а не просто NSDate.

ответил(а) 2010-11-11T14:54:00+03:00 9 лет, 7 месяцев назад
39

NSDate *today = [NSDate date];
NSTimeInterval threeDays = 86400*3;

NSDate *threeDaysFromToday = [NSDate dateWithTimeInterval:threeDays sinceDate:today];

ответил(а) 2010-11-11T14:52:00+03:00 9 лет, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема