2012-08-01 119 views
0

这个问题被问了很多,但我找不到解决方案,我的问题。用新格式将NSString转换为NSDate

我想要什么: 将作为NSString给出的日期转换为具有完全不同格式的NSDate。 我想将Tue, 31 Jul 2012 10:15:00 GMT转换成2012-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,模拟器和设备上的值为零。

回答

0

,这是为我工作好,你可以使用它:

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

它一直的测试仅限真实设备

+0

由于之前添加!这工作。我必须将格式化程序的区域设置为en_US:'[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@“en_US”]]',因为我的区域设置默认为“de_DE”,这似乎是错误的。 – Sebastian 2012-08-02 07:16:19

0

转换

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