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)

是不是漏了什么东西 请帮忙啊

ios objective-c

Rechtare 11 years, 7 months ago

第一个问题

要看你的 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

townleo answered 11 years, 7 months ago

//转时间戳
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);

夏ˉ 格° answered 11 years, 7 months ago

没有设置格式。可以使用 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];

ever17 answered 11 years, 7 months ago

Your Answer