Sebastian Sebastian - 3 years ago 74
iOS Question

Convert NSString to NSDate with new format

This question was asked a lot, but I can't find the solution for my problem.

What I want:
Convert a date given as a NSString into a NSDate with a complete different format.
I want to convert

Tue, 31 Jul 2012 10:15:00 GMT
to
2012-07-31 10:15:00 +0000
.

My code:

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];


Problem:
endDate
is
nil
.

Edit:

Found a strange behaviour.

When I change the first dateFormat to
@"EEE, dd MMM yyy HH:mm:ss 'GMT'"
(added GMT) then the output of endDate is correct, but only in the Simulator. On the device it is still nil.

With the dateFormat without "GMT" the value is nil on the Simulator and on the Device.

Answer Source

this is working well for me, you might use it:

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);

the endDate is:

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

UPDATE #1

it has been tested on the real device only!

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download