Objective-C:帮助我将时间戳转换为格式化的日期/时间

时间:2011-09-21 21:39:30

标签: objective-c timestamp unix-timestamp

我真的很难将这个时间戳转换为一个很好的格式化日期字符串。

这是时间戳:“1316625985”

这就是我所做的功能:

-(NSString*)timestamp2date:(NSString*)timestamp{
    NSString * timeStampString =timestamp;
    //[timeStampString stringByAppendingString:@"000"];   //convert to ms
    NSTimeInterval _interval=[timeStampString doubleValue];
    NSDate *date = [NSDate dateWithTimeIntervalSince1970:_interval];
    NSDateFormatter *_formatter=[[NSDateFormatter alloc]init];
    [_formatter setDateFormat:@"dd/MM/yy"];
    return [_formatter stringFromDate:date];
}

麻烦的是,它在1972年不断返回日期! (31/7/72)这是错误的,因为它是2011年9月的日期......

有人可以建议任何解决方案吗?

非常感谢,

5 个答案:

答案 0 :(得分:15)

自1970年1月1日起,不是纪元吗?你确定你没有离开毫秒线吗?

当我运行你的逻辑时(没有你的行为ms附加000),它起作用了。这是我做的:

    NSString * timeStampString = @"1316641549";
    NSTimeInterval _interval=[timeStampString doubleValue];
    NSDate *date = [NSDate dateWithTimeIntervalSince1970:_interval];
    NSLog(@"%@", date);

输出:

2011-09-21 17:46:14.384 Craplet [13218:707] 2011-09-21 21:45:49 +0000

答案 1 :(得分:5)

只需将你的[timeStampString doubleValue]除以千:

NSDate *date = [NSDate dateWithTimeIntervalSince1970:[timeStampString doubleValue]/1000.0];
NSDateFormatter *_formatter=[[NSDateFormatter alloc]init];
[_formatter setDateFormat:@"dd/MM/yy"];
return [_formatter stringFromDate:date];

或尝试[timeStampString longLongValue] /1000.0而不是

祝你好运!

答案 2 :(得分:2)

您是否检查过字符串(timestampString)和双值(_interval)是否相同,doubleValue确实将字符串中的所有字符都考虑在内?

也许将字符串解释为双重作物的价值?


您是否也确定您所解释的时间戳实际上是一个UNIX时间戳,这意味着它计算自1970年1月1日以来经过的秒数(而不是1970年1月1日以来的天数?...或者不是秒另一个约会?)

(也许举一个你试图解释的时间戳值的例子)

答案 3 :(得分:2)

您可以将[timeStampString doubleValue]直接传递到dateWithTimeIntervalSince1970:,而不是将其转换为NSTimeInterval

另外,尝试添加一些NSLog语句,以查看各个点的值,这有助于追踪差异的位置。

希望这有帮助!

答案 4 :(得分:1)

使用NSInterval获取间隔时,请确保时间戳以秒为单位而不是毫秒。如果是以毫秒为单位,只需将NSInterval值除以1000,然后尝试格式化。