2012-04-13 93 views
0

我有一个字符串在UTC,我想转换为NSDate。不知何故即时得到30分钟错误NSDateFormatter错误:不正确的字符串到日期转换

该字符串是 2012-04-10T00:00:00 + 05:30

转换后的日期是 2012-04-09 19点00分00秒+ 0000

地方,因为它本来应该 2012-04-09 18:30:00 +0000

即时通讯使用此功能将字符串转换为日期

- (NSDate *)parseRFC3339Date{ 
    NSDateFormatter *rfc3339TimestampFormatterWithTimeZone = [[NSDateFormatter alloc] init]; 
    [rfc3339TimestampFormatterWithTimeZone setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"]; 

    NSDate *theDate = nil; 
    NSError *error = nil; 
    if (![rfc3339TimestampFormatterWithTimeZone getObjectValue:&theDate forString:self range:nil error:&error]) { 
     NSLog(@"Date '%@' could not be parsed: %@", self, error); 
    } 

    [rfc3339TimestampFormatterWithTimeZone release]; 
    return theDate; 
} 

回答

2

如果您要创建一个NSRange覆盖整个字符串,并在以-getObjectValue:forString:range:error:通过其地址,然后你会看到,输出会很短。解析停在冒号,因为格式字符串中的'Z'只匹配类似“-0800”(无冒号)的内容。如果您要指定4个Z,'ZZZZ',它将匹配类似“GMT-08:00”的内容。这允许冒号,但需要“GMT”。如果您确定日期字符串的格式,可以尝试插入“GMT”。