Uw format string is dichtbij, maar u wilt de milliseconden specificeren met SSS , ook:
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSX"];
Ook de Z in je datumstring staat voor "Zulu" (d.w.z. GMT/UTC), dus je dateFormat moet Z . gebruiken of X zonder aanhalingstekens, zodat de tijdzone van de tekenreeks correct wordt geparseerd. Zorg er ook voor dat u uw tijdzone dienovereenkomstig instelt als u strings van datums bouwt. U wilt ook uw landinstelling instellen:
NSLocale *enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.locale = enUSPOSIXLocale;
formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSX";
formatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
Zie Technische Q&A QA1480 voor meer informatie.
U kunt ook de nieuwere NSISO8601DateFormatter . gebruiken , waarmee je uit sommige van dat onkruid komt:
NSISO8601DateFormatter *formatter = [[NSISO8601DateFormatter alloc] init];
formatter.formatOptions = NSISO8601DateFormatWithFullDate | NSISO8601DateFormatWithFullTime | NSISO8601DateFormatWithFractionalSeconds;