How to parse a date string into an NSDate object in iOS?
Solution 1:
You don't need near as many single quotes as you have (only needed on non date/time characters), so change this:
[self.dateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"];
To this:
[self.dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZ"];
...
self.currentQuestion.updated = [self.dateFormatter dateFromString:[self.currentParsedCharacterData stringByReplacingOccurrencesOfString:@":" withString:@"" options:0 range:NSMakeRange([self.currentParsedCharacterData length] – 5,5)]];
Documentation here: https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html#//apple_ref/doc/uid/TP40002369-SW1
Unicode Format Patterns: http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns
Dealing with TimeZones with Colons (+00:00): http://petersteinberger.com/2010/05/nsdateformatter-and-0000-parsing/
Solution 2:
I was having the same problems with the colon at the end. Here's a function I used to normalize the date to make NSDate
happy.
/**
* Timezones are returned to us in the format +nn:nn
* The date formatter currently does not support IS 8601 dates, so
* we convert timezone from the format "+07:30" to "+0730" (removing the colon) which
* can then be parsed properly.
*/
- (NSString *)applyTimezoneFixForDate:(NSString *)date {
NSRange colonRange = [date rangeOfCharacterFromSet:[NSCharacterSet characterSetWithCharactersInString:@":"] options:NSBackwardsSearch];
return [date stringByReplacingCharactersInRange:colonRange withString:@""];
}
Solution 3:
It took me a while to find the simple answer for this. and there are a lot of solutions that involve bringing in extra third party code.
For those who are struggling with this now and are only supporting iOS 6 and above.
You can set the date formatter to
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"]
And this will properly handle the "-05:00" with the colon.
Solution 4:
Solutions is to change :
[self.dateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"];
To this notation :
[self.dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"];
i hope it will help you.