2015-06-18 6 views
0
NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init]; 
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
NSString *dateStr = [NSString stringWithFormat:@"%@",[[cachedPostArray objectAtIndex:0] objectForKey:@"date_time"]]; 

NSDate *dtTime1 = [dateFormat dateFromString:dateStr];    
double timeInMS1 =(long) (floor([[NSDate date] timeIntervalSince1970]) * 1000); 
double timeInMS2 =(long) (floor([dtTime1 timeIntervalSince1970]) * 1000); 

NSString *diffTimestamp = [NSString stringWithFormat:@"%f",timeInMS1 - timeInMS2]; 

Я прохожу dateStr = 2015-06-18 18:37:57 по сравнению с текущей датой. Всегда получать разницу 0 в миллисекундах.NSDateFormatter не соответствует разнице в миллисекундах при сравнении двух дат в Xcode 6.3.2

+0

Какие значения для '' timeInMS1' и timeInMS2'? – rmaddy

+1

Что делает '[[cachedPostArray objectAtIndex: 0] objectForKey: @" date_time "]' return? –

+0

и почему вы форматируете строку как строку с единственным параметром, стоящим за строкой? просто храните 'stringWithFormat'! – luk2302

ответ

2

, потому что вы floor значения в начале:

double timeInMS1 =(long) (floor([[NSDate date] timeIntervalSince1970]) * 1000); 
double timeInMS2 =(long) (floor([dtTime1 timeIntervalSince1970]) * 1000); 

должно быть на самом деле без floor или без броска и floor позже (после умножения с 1000):

double timeInMS1 = floor([[NSDate date] timeIntervalSince1970] * 1000); 
double timeInMS2 = floor([dtTime1 timeIntervalSince1970] * 1000); 

Что вы в настоящее время делают, получают секунды и миллисекунды после десятичной точки, тогда вы removing миллисекунды, , затем умножаетесь на 1000. Это тоже поздно.

Или, как rmaddy правильно предложил, использовать длинные, в первую очередь:

long timeInMS1 = [[NSDate date] timeIntervalSince1970] * 1000; 
long timeInMS2 = [dtTime1 timeIntervalSince1970] * 1000; 
+1

Поскольку цель состоит в том, чтобы получить целые миллисекунды, не беспокойтесь о 'floor' вообще и измените' timeInMS1' и 'timeInMS2' на' long' вместо 'double'. – rmaddy

+0

@rmaddy right ... отредактировано, чтобы включить это, делает ли это ваше предложение? – luk2302

+0

Нет необходимости в приведениях. Компилятор автоматически добавит значения 'double' в' long'. – rmaddy