I am trying to create a formatter that will convert the date format shown to an NSDate object:
NSString *dateStr = @\"2010-06-21T19:00:00-05:00\";
NSDateForm
This is the default time format I got from a Sinatra ActiveRecord backend. Here is my solution.
-(NSDate *) dateFromString:(NSString *)string{
NSMutableString * correctedDateString = [[NSMutableString alloc] initWithString:string];
[correctedDateString deleteCharactersInRange: NSMakeRange(22, 1)];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZ"];
return [formatter dateFromString:correctedDateString];
}
To process the time zone with the colon in it, you just need to use 5 'Z's. This is a pretty common date format, the ISO-8601 format. This will only work on iOS 6.x+
-(NSDate *) dateFromString:(NSString *)string {
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"];
return [formatter dateFromString:string];
}
Honestly, you'll just have to change the source data (removing the colon) before running it through the formatter. Your original date string is non-standard and none of the time zone format strings will work properly on it.
You can see the valid inputs on unicode.org.
ZZZ e.g. "-0500"
ZZZZ e.g. "GMT-05:00"
Nothing for "-05:00"
This is the only solution that worked for me:
[dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"];
May be I missed something but ZZ
worked for me.
I used:
@"yyyy-MM-dd'T'HH:mm:ss.SSSZZ"
for
2014-02-27T08:00:00.000+04:00
5 ZZZZZ - heres a category I wrote with some sample of GMT to BST
https://github.com/clearbrian/NSDateFormatter_ISO_8601