IOS中时间戳转换 stringFromDate返回值是null
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:formatString];
NSLog(@"date------:%@",date);
NSString *dateString = [dateFormat stringFromDate:date];
NSLog(@"time: %@", dateString);
date打印出来是正常的 但是无法转换成对应的格式。
打印出来是下面的结果
2015-02-05 14:22:22.057 Puyun[2416:144800] date------:1421311500000
2015-02-05 14:22:22.057 Puyun[2416:144800] time: (null)
很奇怪。
我拷贝了一块代码到程序中
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterMediumStyle];
[formatter setTimeStyle:NSDateFormatterShortStyle];
[formatter setDateFormat:@"yyyyMMddHHMMss"];
NSDate *datea = [formatter dateFromString:@"1283376197"];
NSLog(@"date1:%@",datea);
居然打印出
2015-02-05 15:47:48.619 Puyun[2952:183558] date1:(null)
是不是漏了什么东西 请帮忙啊
Answers
第一个问题
要看你的 date 是什么格式的。
[dateFormat stringFromDate:date];
接受的是 NSDate 类型,可你的 date 肯定不是。如果是的话,打印出来就不会是
1421311500000
这样了。
看起来是个 long 类型的样子,所以第一步要先把它转成 NSDate。你可以参考上面 @avboy 的答案。
第二个问题
因为你定的格式是
yyyyMMddHHMMss
,而给的 String 又不符合这个格式,所以结果是 nil 了呀。
我把这一句改成:
NSDate *datea = [formatter dateFromString:@"20150206190300"];
就得出结果了:
2015-02-05 19:03:33.574 iOSTest[4411:76190] date1:2015-03-06 11:00:00 +0000
//转时间戳
NSDate *datea = [NSDate dateWithTimeIntervalSince1970:[@"1283376197" doubleValue]];
//转时间字符串
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterMediumStyle];
[formatter setTimeStyle:NSDateFormatterShortStyle];
[formatter setDateFormat:@"yyyy-MM-dd HH:MM:ss"];
NSDate *datea = [NSDate dateWithTimeIntervalSince1970:[@"1283376197" doubleValue]];
NSString *dateString = [formatter stringFromDate:datea];
NSLog(@"date1:%@",dateString);
没有设置格式。可以使用
setDateFormat:
或者
setDateStyle:
方法设置,就不会返回
nil
了
[dateFormat setDateStyle:NSDateFormatterFullStyle];
//或者
[dateFormat setDateFormat:@"yyyy-mm-dd"];
NSString *dateString = [dateFormat stringFromDate:date];
NSLog(@"time: %@", dateString);
Unix 时间戳转
NSDate
可以这么写
long timesp = 1283376197; //Unix 时间戳
NSDate *date = [NSDate dateWithTimeIntervalSince1970:timesp];