我真的很难将这个时间戳转换为一个很好的格式化日期字符串。
这是时间戳:“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月的日期......
有人可以建议任何解决方案吗?
非常感谢,
答案 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,然后尝试格式化。