La tua stringa di formato è vicina, ma vuoi specificare i millisecondi con SSS
anche :
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSX"];
Inoltre, la Z
nella stringa della tua data sta per "Zulu" (cioè GMT/UTC), quindi il tuo dateFormat
dovrebbe usare Z
o X
senza virgolette in modo che analizzi correttamente il fuso orario della stringa. Inoltre, se stai creando stringhe dalle date, assicurati di impostare il tuo fuso orario di conseguenza. Vuoi anche impostare la tua lingua:
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];
Vedi Domande e risposte tecniche QA1480 per ulteriori informazioni.
Puoi anche utilizzare il nuovo NSISO8601DateFormatter
, che ti fa uscire da alcune di quelle erbacce:
NSISO8601DateFormatter *formatter = [[NSISO8601DateFormatter alloc] init];
formatter.formatOptions = NSISO8601DateFormatWithFullDate | NSISO8601DateFormatWithFullTime | NSISO8601DateFormatWithFractionalSeconds;