NSTimeInterval и посмотреть, если в прошлом дата была больше часа - PullRequest
0 голосов
/ 07 мая 2018

Я нахожу даты очень не интуитивно понятными и запутанными, так что вот так.

У меня есть массив событий с датами, и если дата какого-либо одного события больше часа назад, я хочу удалить его.

Код, который я использую:

NSDate *now = [NSDate date];
Events *event = mutableEventsArray[i];
if (event.date!=nil) {
    NSTimeInterval sinceNow = [event.date timeIntervalSinceNow];
    NSLog(@"sinceNow%@",sinceNow);
    NSTimeInterval hourInterval = 3600;
    if (sinceNow<hourInterval) {
        [mutableEventsArray removeObjectAtIndex:i];
    }
}

Проблема в том, что он удаляет события, которые в прошлом были менее часа.

В одном из примеров, который я только что запустил, запись now в консоли показывает:

Mon May  7 11:52:31 2018

Запись события.дата показывает: Mon May 7 11:35:42 2018

Разница составляет 17 минут или около 1020 секунд, что намного меньше часа.

Однако, когда я записываю интервал времени, начиная с консоли, я получаю отрицательное число: sinceNow-97005.383634. Это число больше 3600, не говоря уже о 1020. Так что что-то не так с расчетом NSTimeInterval sinceNow = [event.date timeIntervalSinceNow];

Я прочитал , что при использовании NSTimeInterval не учитывается летнее время и високосные годы, но я не понимаю, как это применимо здесь.

Буду признателен за любые предложения по этому вопросу.

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Вы могли бы быть счастливее, если бы вы перевернули расчет:

NSTimeInterval ageOfEvent = [now timeIntervalSinceDate:event.date];

Это дает ageOfEvent ожидаемое значение: это прошедшее время с момента события в секундах. Таким образом, вы можете сказать

if (ageOfEvent > 3600) {
    [mutableEventsArray removeObjectAtIndex:i];
}
0 голосов
/ 07 мая 2018

-[NSDate timeIntervalSinceNow] возвращает отрицательное значение для даты в прошлом и положительное значение для даты в будущем. Чтобы проверить, является ли дата более часа назад, вы должны проверить, является ли timeIntervalSinceNow <-3600 </p>

...