您的格式字符串已关闭,但您也希望使用SSS指定毫秒:
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSX"];
此外,日期字符串中的Z代表“Zulu”(即GMT / UTC),因此您的dateFormat应使用不带引号的Z或X,以便正确解析字符串的时区.此外,如果您要从日期构建字符串,请确保相应地设置您的时区.您还想设置您的语言环境:
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];
您还可以使用较新的NSISO8601DateFormatter,它可以帮助您摆脱一些杂草:
NSISO8601DateFormatter *formatter = [[NSISO8601DateFormatter alloc] init];
formatter.formatOptions = NSISO8601DateFormatWithFullDate | NSISO8601DateFormatWithFullTime | NSISO8601DateFormatWithFractionalSeconds;