NSString
到NSDate
转化返回null
。
原始字符串输出“ 2013-07-16T18:42:56 + 02:00 ”,但当我尝试转换为NSDate
时,它会返回“null”
这是我的代码:
// original string
NSString *str = [timeStamp objectAtIndex:indexPath.row];
// convert to date
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
//[dateFormat setDateFormat:@"YYYY-MM-dd'T'HH:mm:ss'+11:00'"];
[dateFormat setDateFormat:@"YYYY-MM-dd'T'HH:mm:ssZZZ"]; // updated from Stavash's post below. Still null is outputted for the date though
[dateFormat setTimeZone:[NSTimeZone timeZoneWithName:@"Australia/Melbourne"]];
NSDate *dte = [dateFormat dateFromString:str];
cell.timeStampLabel.text = [NSString stringWithFormat:@"%@",dte ];
答案 0 :(得分:6)
为什么你将+11:00硬编码为格式?我认为这对你有用(在iOS6.0 +上):
[dateFormat setDateFormat:@"yyyy-MM-dd\'T\'HH:mm:ssZZZZZ"];
对于iOS5.0 +使用:
[dateFormat setDateFormat:@"yyyy-MM-dd\'T\'HH:mm:ssZZZ"];
<强>更新强>
请参阅下面的Rob的评论 - 在iOS5.0 +上,日期格式仅适用于没有冒号的时区。
答案 1 :(得分:1)
您以不正确的方式指定日期
更正后的代码写在下面
NSString *str = @"2013-07-16T18:42:56+0200";
// convert to date
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"YYYY-MM-dd'T'HH:mm:ssZZZ"]; [dateFormat setTimeZone:[NSTimeZone timeZoneWithName:@"Australia/Melbourne"]];
NSDate *dte = [dateFormat dateFromString:str];
答案 2 :(得分:1)
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"YYYY-MM-dd'T'HH:mm:ssZZZ"];
[dateFormat setTimeZone:[NSTimeZone timeZoneWithName:@"Australia/Melbourne"]];
NSString *dateString = @"2013-07-16T18:42:56+02:00";
NSArray * dateArray = [dateString componentsSeparatedByString:@"+"];
NSString * timeZone = [dateArray lastObject];
timeZone = [timeZone stringByReplacingOccurrencesOfString:@":" withString:@""];
dateString = [NSString stringWithFormat:@"%@+%@",[dateArray objectAtIndex:0], timeZone];
NSDate *dte = [dateFormat dateFromString:dateString];
试试这个...希望它对你有用..我做这个的主要原因是ZZZ会理解+0200,它不会理解+02:00。为了使DateFormatter理解+02:00我们需要使用TZD,不幸的是也导致null :(参考:http://www.w3.org/TR/NOTE-datetime