2015-11-06 4 views
0

Я использую touchbegin функцию какПреобразовать UIEvent метка времени на сегодняшний день UNIX

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; 
{ 

    touchStartTime = [event timestamp]; 
    NSLog(@"Time of touch is %f ", touchStartTime); 
} 

, но я хотел бы сравнить его с

double timeToCompare = [[NSDate date] timeIntervalSince1970];

но формат не совместим (временная метка имеет некоторые другие ссылки точка). Как преобразовать [event timestamp] в обычный NSDate или наоборот?

+0

Выглядит грязно, чтобы это сделать; чего вы пытаетесь достичь? – trojanfoe

+0

Я делаю приложение, в котором миллисекунды имеют значение, и сейчас я пытаюсь сравнить, насколько точным является NSDate по сравнению с временной отметкой UIEvent (потому что сервер будет взаимодействовать с работами с отметкой времени UNIX) – Zygro

ответ

0

Поскольку [временная метка события] связана с временем выполнения системы, вы можете получить [NSProcessInfo systemUptime] и получить текущее системное время одновременно и перейти оттуда.

[[NSDate date] timeIntervalSince1970] - [NSProcessInfo systemUptime] + [event timestamp] == [compareDate timeIntervalSince1970] 

(Ну, я не подпишу это в крови. Никогда не пробовал сам.)

0

Учитывая, что [UIEvent timestamp] это количество секунд, прошедших с момента запуска системы, один подход для записи первого мероприятия timestamp и использовать это как ссылку.

@interface MyClass() 
{ 
    BOOL _haveFirstTimestamp; 
    NSTimeInterval _firstTimestamp; 
    NSTimeInterval _firstTimestampTime; 
} 
@end 

... 

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; 
{ 
    NSTimeInterval timestamp = [event timestamp]; 
    if (!_haveFirstTimestamp) { 
     _haveFirstTimestamp = YES; 
     _firstTimestamp = timestamp; 
     _firstTimestampTime = [[NSDate date] timeIntervalSince1970]; 
    } 

    NSTimestamp timeSince1970 = timestamp - _firstTimestamp + _firstTimestampTime; 

    NSLog(@"Time of touch is %f ", timeSince1970); 
} 
Смежные вопросы