Din formatsträng är nära, men du vill ange millisekunderna med SSS
också:
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSX"];
Även Z
i din datumsträng står för "Zulu" (dvs. GMT/UTC), så ditt dateFormat
ska använda Z
eller X
utan citattecken så att den korrekt analyserar strängens tidszon. Dessutom, om du bygger strängar från datum, se till att ställa in din tidszon därefter. Du vill också ställa in ditt språk:
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 Tekniska frågor och svar QA1480 för mer information.
Du kan också använda den nyare NSISO8601DateFormatter
, vilket tar dig ur några av dessa ogräs:
NSISO8601DateFormatter *formatter = [[NSISO8601DateFormatter alloc] init];
formatter.formatOptions = NSISO8601DateFormatWithFullDate | NSISO8601DateFormatWithFullTime | NSISO8601DateFormatWithFractionalSeconds;