Вашият форматен низ е близо, но искате да посочите милисекундите с 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];
Вижте Технически въпроси и отговори QA1480 за повече информация.
Можете също да използвате по-новия NSISO8601DateFormatter
, което ви извежда от някои от тези плевели:
NSISO8601DateFormatter *formatter = [[NSISO8601DateFormatter alloc] init];
formatter.formatOptions = NSISO8601DateFormatWithFullDate | NSISO8601DateFormatWithFullTime | NSISO8601DateFormatWithFractionalSeconds;