使用新格式将NSString转换为NSDate

这个问题被问了很多,但我找不到解决问题的方法。

我想要的 :将作为NSString给出的日期转换为具有完全不同格式的NSDate。 我想转换Tue, 31 Jul 2012 10:15:00 GMT2012-07-31 10:15:00 +0000

我的代码

 NSString *startDateString = @"Tue, 31 Jul 2012 10:15:00 GMT"; //in real from a server NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; [formatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]]; [formatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss"]; NSDate *startDate = [formatter dateFromString:startDateString]; [formatter setDateFormat:@"yyy-MM-dd HH:mm:ss'Z'"]; NSString *endDateString = [formatter stringFromDate:startDate]; NSDate *endDate = [formatter dateFromString:endDateString]; 

问题endDatenil

编辑
发现一种奇怪的行为。
当我将第一个dateFormat更改为@"EEE, dd MMM yyy HH:mm:ss 'GMT'" (添加GMT)然后endDate的输出是正确的,但在模拟器中。 在设备上它仍然是零。
对于没有“GMT”的dateFormat,模拟器和设备上的值为nil。

这对我很有用,你可以使用它:

 NSString *startDateString = @"Tue, 31 Jul 2012 10:15:00 GMT"; //in real from a server NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; [formatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]]; [formatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ssZZZ"]; // SPOT the difference in this line NSDate *startDate = [formatter dateFromString:startDateString]; [formatter setDateFormat:@"yyy-MM-dd HH:mm:ssZZZ"]; // and SPOT the difference in this line NSString *endDateString = [formatter stringFromDate:startDate]; NSDate *endDate = [formatter dateFromString:endDateString]; NSLog(@"%@", endDate); 

endDate是:

 2012-07-31 10:15:00 +0000 

更新#1

它仅在真实设备上进行了测试

转换前添加以下内容

 [formatter setLocale:[[NSLocale alloc]initWithLocaleIdentifier:@"en_US"]];