iOS-時間戳轉時間
- 衆所周知,iOS默認生成的時間戳是10位整數,在調用接口時,如果服務器返回的是時間字符串或者是10位時間戳,轉換格式挺方便的,但如果服務器返回的是13位的時間戳,那麼就比較麻煩了。
10位時間戳
NSTimeInterval timestamp = timestampString.doubleValue;
NSDate *detaildate = [NSDate dateWithTimeIntervalSince1970:timestamp];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat: formatString ?: @"yyyy-MM-dd"];
NSString resultStr = [dateFormatter stringFromDate: detaildate];
13位時間戳
- 如果按照上面的方式轉換,就會轉換錯誤!
- 解決辦法如下:
方法一:除以1000,變成10位
NSTimeInterval timestamp = timestampString.doubleValue / 1000.0;
NSDate *detaildate = [NSDate dateWithTimeIntervalSince1970:timestamp];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat: formatString ?: @"yyyy-MM-dd"];
NSString resultStr = [dateFormatter stringFromDate: detaildate];
方法一:截取字符串,變成10位
NSTimeInterval timestamp = [timestampString substringToIndex: 10].doubleValue;
NSDate *detaildate = [NSDate dateWithTimeIntervalSince1970:timestamp];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat: formatString ?: @"yyyy-MM-dd"];
NSString resultStr = [dateFormatter stringFromDate: detaildate];
最終解決方案
#pragma mark - 時間戳→時間
+ (NSString *)formatTimestamp2DateString:(NSString *)timestampString format:(NSString *)formatString {
if (!timestampString || timestampString.length <= 0) {
return nil;
}
NSTimeInterval timestamp = timestampString.length >= 13 ? timestampString.doubleValue / 1000.0 : timestampString.doubleValue;
NSDate *detaildate = [NSDate dateWithTimeIntervalSince1970:timestamp];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat: formatString ?: @"yyyy-MM-dd"];
return [dateFormatter stringFromDate: detaildate];
}