NSDate является неизменным, поэтому вы не можете изменить его время. Но вы можете создать новый объект даты, привязанный к ближайшей минуте:
NSTimeInterval time = floor([date timeIntervalSinceReferenceDate] / 60.0) * 60.0;
NSDate *minute = [NSDate dateWithTimeIntervalSinceReferenceDate:time];
Изменить, чтобы ответить на комментарий Ули
Ссылочной датой для NSDate
является 1 января 2001 года, 0:00 по Гринвичу. С тех пор было добавлено две дополнительные секунды: 2005 и 2010, поэтому значение, возвращаемое [NSDate timeIntervalSinceReferenceDate]
, должно быть отключено на две секунды.
Это не тот случай: timeIntervalSinceReferenceDate
точно синхронизирован со временем стены.
При ответе на вопрос я не убедился, что это действительно так. Я просто предположил, что Mac OS будет вести себя так же, как и время UNIX (эпоха 1970 года): POSIX гарантирует, что каждый день начинается с кратных 86 400 секунд.
Глядя на значения, возвращенные из NSDate
, это предположение кажется верным, но было бы неплохо найти определенное (задокументированное) утверждение об этом.