Objective c 如何将日期从JSON转换为NSDate

Objective c 如何将日期从JSON转换为NSDate,objective-c,json,date,nsdate,nsdateformatter,Objective C,Json,Date,Nsdate,Nsdateformatter,嗨,我需要转换这个字符串 “2013-12-05T08:58:55.93456+02:00” 至今 我正在尝试下一种格式,但运气不好 “yyyy-MM-dd'HH:MM:SSSSSSSSZZZ” 代码如下 你能帮我找到正确的格式吗 NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; // "2013-12-05T08:58:55.9345456+02:00" [dateForm

嗨,我需要转换这个字符串

“2013-12-05T08:58:55.93456+02:00”

至今 我正在尝试下一种格式,但运气不好

“yyyy-MM-dd'HH:MM:SSSSSSSSZZZ”

代码如下

你能帮我找到正确的格式吗

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
//                         "2013-12-05T08:58:55.9345456+02:00"
[dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:SSSSSSSZZZZZ"];

NSDate *date = [dateFormat dateFromString:jsonDateString];
输出

2013-12-05 08:58:55+0000

输出

2013-12-05 08:58:55+0000


你的格式很接近。你需要:

yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZZZZZ

并确保将格式化程序的区域设置为
en\u US\u POSIX
。解析固定格式的非本地化字符串时,应始终执行此操作。

您的格式已关闭。你需要:

yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZZZZZ

并确保将格式化程序的区域设置为
en\u US\u POSIX
。解析固定格式的非本地化字符串时,应始终执行此操作。

问题在于您所在的时区
+02:00

ZZZZ
仅解析为
+0000
,因此您得到的是
nil

您可以这样做:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
NSString *jsonDateString = @"2013-12-05T08:58:55.9345456+02:00";//@"2013-12-05T08:58:55.9345456+02:00"

 NSRange lastColon = [jsonDateString rangeOfString:@":" options:NSBackwardsSearch];
 if(lastColon.location != NSNotFound) {
        jsonDateString = [jsonDateString stringByReplacingCharactersInRange:lastColon withString: @""];
 }

 [dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'.'SZ"];
 NSDate *date = [dateFormat dateFromString:jsonDateString];

 NSLog(@"%@",date)
编辑:


根据rmaddy的评论,您应该使用
ssss
而不是单个
s
问题在于您所在的时区
+02:00

ZZZZ
仅解析为
+0000
,因此您得到的是
nil

您可以这样做:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
NSString *jsonDateString = @"2013-12-05T08:58:55.9345456+02:00";//@"2013-12-05T08:58:55.9345456+02:00"

 NSRange lastColon = [jsonDateString rangeOfString:@":" options:NSBackwardsSearch];
 if(lastColon.location != NSNotFound) {
        jsonDateString = [jsonDateString stringByReplacingCharactersInRange:lastColon withString: @""];
 }

 [dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'.'SZ"];
 NSDate *date = [dateFormat dateFromString:jsonDateString];

 NSLog(@"%@",date)
编辑:



根据rmaddy的评论,您应该使用
SSSSS
而不是单个
s

试试这个
[dateFormat setDateFormat:@“yyyy-MM-dd'T'HH:MM:ss.”s'+02:00'
@AnoopVaidya这不是字符串的正确格式。谢谢Anoop,这适用于我“yyyy-MM-dd'HH:MM:ss.”“SZZZZZ”尝试此
[dateFormat setDateFormat:@“yyy-MM-dd'T'HH:MM:ss.”S'+02:00'
@AnoopVaidya这不是字符串的正确格式。谢谢Anoop,这对我来说很有用“yyyy-MM-dd'T'HH:MM:ss”。“szzzzzz”使用正确的日期格式,而不是所有的字符串处理,只需使用正确的日期格式。
+02:00
格式时区可以用
ZZZZZ
日期格式解析。那你为什么要扔掉十进制的秒数呢?@rmaddy:它在那里就像
S
在那里……我试过
ZZZZZ
但是没有被解析:(单个
S
可以处理多个小数位数吗?为什么要从时区中去掉冒号?这可以用正确的格式处理。
+02:00
格式的时区可以用
ZZZZZ
日期格式解析。你为什么要丢弃十进制秒数?@rmaddy:It'S'S as
S
在那里……我试过了d与
ZZZZZ
一起使用,但它没有被解析:(单个
S
是否处理多个小数位数?为什么要从时区中删除冒号?这可以用正确的格式处理。很抱歉,但是当我尝试此方法时,我得到了(null)。我正在使用OSX。@AnoopVaidya请确保将格式化程序的区域设置为
en_US\u POSIX
。别管它,它在OSX proj中不起作用。这可能在iOS项目中起作用。:(@AnoopVaidya什么版本的OSX?很抱歉,我正在使用OSX-10.7.5,但当我尝试这个时,我得到了(null)。我正在使用OSX。@AnoopVaidya请确保将格式化程序的区域设置为
en_US\u POSIX
。不要这样,它在OSX项目中不起作用。这可能在iOS项目中起作用。:(@AnoopVaidya什么版本的OSX?我正在使用OSX-10.7.5。)