Din formatstreng er tæt på, men du vil angive millisekunderne med SSS også:
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSX"];
Også Z i din datostreng står for "Zulu" (dvs. GMT/UTC), så dit dateFormat skal bruge Z eller X uden anførselstegn, så den analyserer strengens tidszone korrekt. Hvis du bygger strenge fra datoer, skal du også sørge for at indstille din tidszone i overensstemmelse hermed. Du ønsker også at indstille din lokalitet:
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];
Se Teknisk spørgsmål og svar QA1480 for mere information.
Du kan også bruge den nyere NSISO8601DateFormatter , som får dig ud af noget af det ukrudt:
NSISO8601DateFormatter *formatter = [[NSISO8601DateFormatter alloc] init];
formatter.formatOptions = NSISO8601DateFormatWithFullDate | NSISO8601DateFormatWithFullTime | NSISO8601DateFormatWithFractionalSeconds;