2013-04-24 4 views
0

Есть ли способ добавить одну миллисекунду к текущему времени в объективе c. Я получаю временную метку с сервера и хочу показывать с миллисекундой несколько раз (я не хочу использовать системное время). Любая помощь приветствуется.Добавление одной миллисекунды к текущему времени objectivec

Заранее спасибо.

+0

Является ли отметка времени NSDate (или конвертированы в один)? И что вы подразумеваете под «неоднократно» - обновлять и рисовать на экране неоднократно? – Wain

+0

Да Его в NSDate, и я также хочу обновлять и рисовать на экране несколько раз. Я могу использовать для этого таймер. Но во время работы таймера я хочу повторно добавить одну миллисекунду в текущее время. – Sat

+3

Я думаю, вы знаете, что не можете обновлять экран каждую миллисекунду, и у вас есть веская причина для добавления 1 миллисекунды ... – Wain

ответ

1

Прочтите метку времени в NSDate. Вместо использования

+ (id)dateWithTimeInterval:(NSTimeInterval)seconds sinceDate:(NSDate *)date 

Должно работать.

+0

+1 Только проблема заключается в том, что если системное время iOS и время сервера не совпадают, времена, которые вы вычисляете на основе временной метки, будут ошибочными. Вместо этого вы должны получить текущую дату ('[NSDate date]') и временную метку сервера, определить разницу и умножить это на время, которое вы генерируете, используя метод выше. – Caleb

+0

Как это работает? Казалось бы, если вы создадите NSDate с датой с сервера, что он невосприимчив к настройкам клиента. – Raymond

+0

Правильно, но если вы затем передадите эту дату в '+ dateWithTimeInterval: SinceDate:' на устройстве, то дата, когда вы вернетесь, будет относиться к тому, каково бы ни было текущее время на устройстве. Скажем, устройство на час отличается от сервера. Вы получаете время сервера, превращаете его в дату и сразу же вызываете '[NSDate dateWithTimeInterval: 0 fromDate: serverDate]'. Вы должны получить дату назад, это примерно на час, отличный от даты, которую дал вам сервер, хотя вся транзакция заняла долю секунды. – Caleb

0

Вам необходимо использовать объект класса NSTimer. Некоторые примеры кода:

-(void)startTimer { 

     theTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/1000.0 target:self selector:@selector(updateTimer) userInfo:nil repeats:YES]; 

     //the method updateTimer will be called once every millisecond 
    } 

    -(void)updateTimer { 
     //add one millisecond to the global time variable and display it in a label 
    } 

    -(void)stopTimer { 
     [theTimer invalidate]; //pauses the timer 
    } 

Редактировать

Для использования глобальной переменной времени, NSDate, вероятно, правильный класс. Вы можете инициализировать объект с использованием временного интервала, например. 600 секунд до сих пор:

NSDate *globalDateTime = [[NSDate alloc] initWithTimeIntervalSinceNow:-600]; 

Чтобы добавить 1 миллисекунду ко времени:

globalDateTime = [globalDateTime dateByAddingTimeInterval:1.0/1000.0]; 

И заселить ваше глобальное переменное время в строке:

NSDateFormatter *dateFormatter  = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"HH:mm:ss"]; // use yyyy-MM-dd if you need to show the year, month or day 
NSString *dateTimeString   = [dateFormatter stringFromDate:globalDateTime]; 

В «урожаях класса NSTimeInterval субмиллисекундной точности в течение 10 000 лет ».

Обратитесь к компании Apple documentation на NSDate для более подробной информации:

+0

iam не хватает части добавления одной миллисекунды к глобальной переменной времени и отображает ее на ярлыке. До этого я уже понял. – Sat

+2

Ни в коем случае NSTimer не отличается точностью до 1 миллисекунды. – ahwulf

+0

@ahwulf, документация Apple говорит, что интервал времени принимается за 0,1 миллисекунды, если вы указываете значение параметра меньше или равное 0. 1 миллисекунда в 10 раз больше. –

Смежные вопросы