Я использую NSDateFormatter для генерации объектов NSDate из строк времени сервера. Мы используем ISO-8601 Extended, и ниже метод я имею, который возвращает дату форматирования, который обрабатывает преобразование:NSDateFormatter возвращает Nil с по-видимому правильной строкой формата
+ (NSDateFormatter *) dateFormatter {
NSDateFormatter * dateFormatter = [NSDateFormatter new];
dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSZ";
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier: @"en_US_POSIX"];
return dateFormatter;
}
Однако, когда я использую этот код, ниже утверждают, не удается:
NSDateFormatter * dateFormatter = [MyClass dateFormatter];
// "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
_testDateObject = [dateFormatter dateFromString: @"2016-01-18'T'16:31:16.401Z"];
NSParameterAssert(_testDateObject);
Что случилось с строкой форматирования даты, которую я использую? Я пробовал варианты на нем (например, избегая литералов), и ни один из них не создает действительный NSDate
.
EDIT В мое первоначальное сообщение включена некорректная строка форматирования, которую я использовал. Как отметил rmaddy, я должен использовать yyyy-MM-dd'T'HH:mm:ss.SSSZ
, которым я являюсь.
Прочитайте документацию для спецификаторы формата даты. Прочитайте, что вы должны использовать в течение года, дня и дробных секунд. – rmaddy
Близко связаны: [Nil NSDate при попытке получить дату из строки UTC в Zulu time] (http://stackoverflow.com/q/1263455) –
Спецификация http://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table 'DD' - день года (1.356). «ГГГГ» - не календарный год. 'sss' - секунды. 'SSS' - дробные секунды. – Sulthan