使用新格式将NSString转换为NSDate

时间:2012-08-01 14:24:15

标签: ios nsdateformatter

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

我想要什么: 将作为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,模拟器和设备上的值为nil。

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:0)

转换前添加以下内容

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