2016-08-12 8 views
-2

Я знаю, что это было задано много времени, но все решения, которые я пробовал, изменили формат NSDate, который не то, что я хочу. Поэтому у меня есть NSString, скажем 2016-08-15T00:00:01.000Z, который мне нужно преобразовать в NSDate КАК ЭТО. Я попытался следующий код:Преобразование NSString в NSDate без изменения формата

NSString *newDate = @"2016-08-15T00:00:01.000Z" 

     NSDateFormatter *dateFormater = [[NSDateFormatter alloc] init]; 
     [dateFormater setDateStyle:kCFDateFormatterNoStyle]; 
     [dateFormater setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"]; 
     NSDate *dateFromString = [[NSDate alloc] init]; 
     dateFromString = [dateFormater dateFromString:newDate]; 

Но она изменила формат 2016-08-18 18:30:00 +0000, который не то, что я хочу. Может кто-то мне помочь, спасибо заранее.

+0

NSDate не имеет формата! это всегда то же самое. Слово «формат» относится к строковой версии даты. – Nishant

+0

Значит, вы хотите сказать, что это невозможно? – TKutal

+0

Дата должна быть правильной, но удалять одинарные кавычки вокруг 'Z'. Кстати: когда вы используете настраиваемый формат формата даты, стиль не действует. Учтите, что 'NSLog' 'экземпляр' NSDate' отображает дату в часовом поясе UTC. – vadian

ответ

0

Но она изменила формат 2016-08-18 18:30:00 +0000

NSDate не имеет формат, таким же образом int или double не имеют формат. Внутренне a NSDate представлено как количество секунд с тех пор, как будет начальная дата-дата: контрольная -.

Когда вы говорите о «формате», вы говорите о текстовом представлении, и одно и то же значение может иметь разные текстовые представления. Например, «три», «3» и «III» - все текстовые представления числа 3 - номер сам по себе не имеет формата, но может быть представлен (отформатирован) разными способами.

Попробуйте добавить эти три строки в код:

NSString *stringFromDate1 = [dateFormater stringFromDate:dateFromString]; 
NSString *stringFromDate2 = [dateFromString description]; 
NSLog(@"%@ | %@ | %@", dateFromString, stringFromDate1, stringFromDate2); 

Какой выход? stringFromDate1 - это значение даты, представленное в вашем исходном формате, а stringFromDate2 - это формат, созданный методом description - они имеют одинаковую дату, только отформатированные по-разному. И так как выполнение приведенного выше кода покажет вам, если NSLog передан нестроковый объект, он вызывает свой метод description, чтобы получить текстовое представление, которое оно может вывести.

Надеюсь, что все имеет смысл!

TL; DR: не строковые типы данных не имеют форматов, их можно преобразовать в текстовые представления и из них.

+0

Большое спасибо за то, что уделили время объяснению вещей, а не просто голосуйте на вопрос и двигайтесь дальше :) – TKutal

Смежные вопросы