dateWithTimeIntervalSince1970未返回正确的日期

时间:2013-11-22 20:58:19

标签: objective-c nsdate unix-timestamp nstimeinterval

我在下面有以下方法,用于检索unixTimeStamp并将其从API调用转换为我可以轻松操作和使用的NSDate对象。出于某种原因,这会返回错误的值。一个例子是当unixTimeStamp是1385152832时,日期应该是

周五,2013年11月22日20:40:31 GMT 2013年11月22日美国东部时间下午3:40:31

但反而吐出: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

1 个答案:

答案 0 :(得分:21)

messageDateString方法自纪元以来返回毫秒,而不是自纪元以来的秒数。查看调试器窗格中unixTimeStamp的值。这是1384803782032.这大约是当前Unix时间戳的1000倍。

NSTimeInterval以秒为单位,而不是毫秒。试试这个:

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