2013-11-22 1 views
5

У меня есть следующий ниже метод, который предназначен для извлечения и преобразования unixTimeStamp из вызова API в объект NSDate, с которым я могу легко манипулировать и использовать. По какой-то причине это возвращает неверные значения. Примером может быть, когда unixTimeStamp является 1385152832, дата должна бытьdateWithTimeIntervalSince1970 не возвращает правильную дату

Пт, 22 ноября 2013 20:40:31 GMT 22 ноября 2013 в 3:40:31 вечера EST

но вместо выплевывает : 45852-09-07 08:13:52 EST. Кто-нибудь знает, почему это произойдет?

-(NSDate *)messageDate 
{ 
    NSTimeInterval unixTimeStamp = [[self messageDateString] doubleValue]; 
    NSDate *messageDate = [NSDate dateWithTimeIntervalSince1970:unixTimeStamp]; 
    NSAssert(messageDate, @"messageDate should not be nil"); 
    return messageDate; 
} 

enter image description here

+0

Как вы форматируете NSDate? Он не будет отображаться так, как вы показываете выше. –

+0

Похоже, ваш 'unixTimeStamp' не настроен так, как вы думаете. Когда я пишу 'NSLog (@" Date:% @ ", [NSDate dateWithTimeIntervalSince1970: 1385152832]);' Я получаю 'Date: 2013-11-22 20:40:32 + 0000'. –

+0

Я считаю, что вам может понадобиться NSDateFormatter, чтобы получить правильное строковое представление объекта NSDate. См. Этот [LINK] (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html#//apple_ref/occ/cl/NSDateFormatter) для пример. – dean

ответ

18

Метод messageDateString возвращается миллисекунды с эпохи, а не секунд с начала эпохи. Посмотрите на значение unixTimeStamp в панели вашего отладчика. Это 1384803782032. Это примерно в 1000 раз слишком велико, чтобы быть текущей временной отметкой Unix.

Оценка: NSTimeInterval измеряется в секундах, а не в миллисекундах. Попробуйте это вместо:

-(NSDate *)messageDate { 
    NSTimeInterval unixTimeStamp = [[self messageDateString] doubleValue]/1000.0; 
    NSDate *messageDate = [NSDate dateWithTimeIntervalSince1970:unixTimeStamp]; 
    NSAssert(messageDate, @"messageDate should not be nil"); 
    return messageDate; 
} 
+0

Darn! Посмотрел прямо мимо этой проблемы! –