datebyAddingTimeInterval не работает - PullRequest
3 голосов
/ 24 января 2012

в некоторых случаях мне нужно увеличить NSDate за 1 день.Для этого я использую dateByAddingTimeInterval, но он не работает.

Вот код:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"dd/MM/yyyy HH:mm"];
NSString *startDate = [NSString stringWithFormat:@"%@/2012 %@",dayString, begin];
NSString *endStringForDate = [NSString stringWithFormat:@"%@/2012 %@",dayString, end];

NSLog(@"Csantos: event starts: %@, event ends: %@", startDate, endStringForDate);

NSDate *beginDate = [dateFormat dateFromString:startDate];
NSDate *endDate = [dateFormat dateFromString:endStringForDate];

NSComparisonResult result = [beginDate compare:endDate];


if(result == NSOrderedDescending){
    NSTimeInterval dayinseconds = 24 * 60 * 60;

    [endDate dateByAddingTimeInterval:dayinseconds];
    NSLog(@"Csantos: event ends: %@", endDate);
}

Результаты:

2012-01-24 12:09:47.837 app[3689:207] Csantos: event starts: 19/02/2012 23:00, event ends: 19/02/2012 03:00
2012-01-24 12:09:47.837 app[3689:207] Csantos: event ends: 19/02/2012 03:00

Я уже пробовал addTimeInterval (не рекомендуется, я знаю), но это тоже не работает.Что не так?

С уважением!

Ответы [ 3 ]

11 голосов
/ 24 января 2012

[endDate dateByAddingTimeInterval:dayinseconds]; возвращает значение, которое является новой датой, созданной функцией.Даты являются неизменяемыми объектами (например, строками), поэтому вы не можете их изменять - вы можете получить новую дату, только применив функцию.

Если вы напишите это, вместо этого она будет работать:

endDate = [endDate dateByAddingTimeInterval:dayinseconds];
1 голос
/ 24 января 2012

[endDate dateByAddingTimeInterval:dayinseconds]; не меняет существующий объект (endDate), он возвращает новый объект NSDate, так что

endDate = [endDate dateByAddingTimeInterval:dayinseconds];
NSLog(@"Csantos: event ends: %@", endDate);
0 голосов
/ 20 июня 2018

В Swift 4 , используйте добавлениеTimeInterval метод.

endDate = endDate.addingTimeInterval(dayinseconds)
...