Objective c 如何将日期从JSON转换为NSDate
嗨,我需要转换这个字符串 “2013-12-05T08:58:55.93456+02:00” 至今 我正在尝试下一种格式,但运气不好 “yyyy-MM-dd'HH:MM:SSSSSSSSZZZ” 代码如下 你能帮我找到正确的格式吗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
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 asS
在那里……我试过了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。)