NSDate* d = [f dateFromString:s];如果是24小时格式会返回nil

首先粘一下我的方法,很简单就是将服务器返回的时间字符串转换为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 

你可能感兴趣的:(NSDate* d = [f dateFromString:s];如果是24小时格式会返回nil)