Как получить дату следующих 15 дней в зависимости от даты текущего дня?

В настоящее время я могу получить текущую дату iPhone, используя следующий код

NSDate* date = [NSDate date];
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd"];
NSString* currentDateStr = [formatter stringFromDate:date];
NSLog(@"User's current Date:%@",currentDateStr);

но я хочу получить дату следующих 15 дней с текущей даты, как я могу это получить?


person user1227928    schedule 28.03.2013    source источник


Ответы (4)


Попробуй это:

NSCalendar* calendar = [[[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar] autorelease];
NSDateComponents* components = [[[NSDateComponents alloc] init] autorelease];
components.day = 15;
NSDate* newDate = [calendar dateByAddingComponents: components toDate: self.date options: 0];
person Leo Chapiro    schedule 28.03.2013

Попробуйте с этим:

NSTimeInterval totalOffset = /*time to add - in seconds */
NSDate *today = [NSDate date];
NSDate *endWithTZ = [today dateByAddingTimeInterval:totalOffset];
person Fabrizio Duroni    schedule 28.03.2013
comment
Обратите внимание, что во многих регионах мира используется летнее время, поэтому время суток в секундах непостоянно. - person Martin R; 28.03.2013

Может быть лучший способ (и я смотрю этот вопрос, чтобы узнать, есть ли он), но это то, что я сейчас использую:

+ (NSDate *)offsetFromDate:(NSDate *)fromDate withDays:(int)days 
{
    NSTimeInterval timeInterval = (days * 86400);
    NSDate *date = [[NSDate alloc] initWithTimeInterval:timeInterval sinceDate:fromDate];    
    return date;
}

Если вы погуглите количество секунд в сутках, вы получите значение 86400.

person kailoon    schedule 28.03.2013
comment
Это очень наивное решение, работающее в большинстве ситуаций, но ужасно терпящее неудачу в некоторых других ситуациях. - person Sulthan; 28.03.2013
comment
Обратите внимание, что во многих регионах мира используется летнее время, поэтому в некоторые дни на один час больше или меньше. - person Martin R; 28.03.2013
comment
Верно. Метод компонентов даты - правильный способ сделать это. - person jrturton; 28.03.2013
comment
И ты прав. Я проголосовал за ответ duDE и изменил свой, чтобы использовать его. Здесь всегда здорово узнавать что-то новое. знак равно - person kailoon; 28.03.2013

person    schedule
comment
это самое простое решение - person Burhanuddin Sunelwala; 28.03.2013
comment
Обратите внимание, что во многих регионах мира используется летнее время, поэтому в некоторые дни на один час больше или меньше. - person Martin R; 28.03.2013
comment
Это не работает, например, при переходе на летнее время, когда можно добавить или удалить час. - person Sulthan; 28.03.2013
comment
1 час пренебрежимо мал перед 15 днями. это не имеет большого значения. Это просто самый быстрый способ выполнить задачу. - person Burhanuddin Sunelwala; 28.03.2013
comment
@BurhanuddinSunelwala Один час может быть разницей между двумя днями, особенно если в исходной дате компонент времени достаточно близок к полуночи. Это неправильное решение, и вопрос о простоте спорен. - person Sulthan; 28.03.2013