dateWithTimeIntervalSince1970未返回正确的日期

The*_*Art 5 objective-c nsdate unix-timestamp nstimeinterval

我有下面的方法,用于检索和调用从API调用的unixTimeStamp到我可以轻松操作和使用的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;
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

rob*_*off 22

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

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

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