Twój ciąg formatu jest zbliżony, ale chcesz określić milisekundy za pomocą SSS
też:
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSX"];
Również Z
w ciągu daty oznacza „Zulu” (tj. GMT/UTC), więc Twój dateFormat
powinien używać Z
lub X
bez cudzysłowów, aby poprawnie analizował strefę czasową ciągu. Ponadto, jeśli tworzysz ciągi znaków z dat, upewnij się, że odpowiednio ustawiłeś strefę czasową. Ty też chcesz ustawić swoją lokalizację:
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];
Zobacz Techniczne pytania i odpowiedzi QA1480 aby uzyskać więcej informacji.
Możesz także użyć nowszego NSISO8601DateFormatter
, co pozwala pozbyć się niektórych z tych chwastów:
NSISO8601DateFormatter *formatter = [[NSISO8601DateFormatter alloc] init];
formatter.formatOptions = NSISO8601DateFormatWithFullDate | NSISO8601DateFormatWithFullTime | NSISO8601DateFormatWithFractionalSeconds;