Как очистить NSDate миллисекунды - PullRequest
3 голосов
/ 30 августа 2010

Я хочу сохранить дату / время в хранилище CoreData без секунд или миллисекунд. (Я делаю некоторую обработку, чтобы округлить время, и случайные секунды / миллисекунды становятся гаечным ключом.) Достаточно просто отбросить секунды:

NSDate *now = [NSDate date];
NSDateComponents *time = [[NSCalendar currentCalendar]
                          components:NSHourCalendarUnit | NSMinuteCalendarUnit 
                          | NSSecondCalendarUnit fromDate:now];
    NSDate *nowMinus = [now addTimeInterval:-time.second];
    // e.g. 29 Aug 10 4:43:05 -> 29 Aug 10 4:43:00

Это прекрасно работает для обнуления секунд, но я не могу найти NSMillisecondCalendarUnit, который мог бы использовать для обнуления миллисекунд, и мне нужно. Есть идеи? Спасибо.

1 Ответ

8 голосов
/ 30 августа 2010

timeIntervalSince1970 возвращает количество секунд (в двойном) с 1 января 1970 года. Вы можете использовать это время для усечения любого количества секунд, которое вам нравится.Чтобы округлить до ближайшей минуты, вы можете сделать:

NSTimeInterval timeSince1970 = [[NSDate date] timeIntervalSince1970];

timeSince1970 -= fmod(timeSince1970, 60); // subtract away any extra seconds

NSDate *nowMinus = [NSDate dateWithTimeIntervalSince1970:timeSince1970];

Типы данных с плавающей запятой изначально неточны, но приведенное выше может быть достаточно точным для ваших нужд.

...