Apple добавлена в NSSystemClockDidChangeNotification , часть NSDate, в Snow Leopard (10.6). Кажется, нет способа сделать это в Leopard (10.5) или ранее. Согласно Apple NSDate документы :
Размещается при каждом изменении системных часов. Это может быть инициировано вызовом settimeofday () или изменением пользователем значений на панели предпочтений даты и времени. Объект уведомления пуст. Это уведомление не содержит словаря userInfo.
Это не говорит вам, "сколько" времени изменилось. Вы можете рассчитать это, периодически (скажем, каждые 5 секунд в NSTimer
), записывая системное время с помощью [NSDate date]
, сохраняя его в переменной, а затем после срабатывания NSSystemClockDidChangeNotification
, захватывайте новую дату и сравнивайте два вместе, используя NSDate timeIntervalSinceDate:
метод, чтобы получить разницу.
Не с точностью до миллисекунды или даже секунды, но довольно близко.
РЕДАКТИРОВАТЬ: См. этот пост . Вы могли бы использовать команду UpTime()
C, чтобы получить время работы системы в тиках процессора (которые вы можете позже преобразовать в секунды). Вы можете использовать это, чтобы выяснить, сколько времени изменилось (при условии отсутствия перезагрузки системы или сна). Это работает, даже если системные часы изменены пользовательским или сетевым протоколом времени.