首先粘一下我的方法,很简单就是将服务器返回的时间字符串转换为date,问题是总有一部分给我返回nil
+(NSDate*)dateFromString:(NSString*)s format:(NSString*)str{
NSDateFormatter* f=[[NSDateFormatter alloc]init];
if(str==nil)
str = @"yyyy-MM-dd";
[f setDateFormat:str];
NSDate* d = [f dateFromString:s];
return d;
}
下面三组分别为这个方法的三个参数str,s,返回值
2015-07-22 10:56:35
yyyy-MM-dd hh:mm:ss
2015-07-22 02:56:35 +0000
2015-07-22 10:54:13
yyyy-MM-dd hh:mm:ss
2015-07-22 02:54:13 +0000
2015-07-20 13:59:36
yyyy-MM-dd hh:mm:ss
nil
可以看到我的时间字符串是24小时格式,但是采用的格式是 yyyy-MM-dd hh:mm:ss
接下来就说下问题所在
/*
NSDateFormatter 的一些格式介绍
[dateFormatter setDateFormat:@"yyyy-
MM-dd HH:mm:ss"];
//这里要注意的是formatter的格式,如果是小写的"hh",那么时间将会跟着系统设置变成12小时或者
24小时制。大写的"HH",则强制为24小时制。
[dateFormatter setDateFormat:@"yyyy年MM月dd日#EEEE"];EEEE为星期几,EEE为周几
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[dateFormatter setDateFormat:@"yyyy年MMMMd日"];//MMMM 为xx月,一个d可以省去01日前的0
*/
从上边概念可以看到,我们返回的时间字符串是24小时的,但是因为设置的formatter是yyyy-MM-dd hh:mm:ss,所以对于手机系统设置采用24小时的根本不会出现问题,但是有些手机采用12小时的就会出现问题了。
NSData 和NSDateFormatter的使用总结 - CharlesBein_卞
- 博客频道 - CSDN.NET