NSString到NSDate转换返回null

时间:2013-08-05 12:32:12

标签: ios objective-c nsstring nsdate

NSStringNSDate转化返回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 ];

3 个答案:

答案 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