2015-11-06 9 views
-3

Это очень распространенный вопрос, но мой может быть уникальным, так как у меня есть длинные десятичные разряды за секунды.Преобразование: NSString в NSDate

NSString *timestamp = @"2015-11-06 15:27:34.0000000"; 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss zzz"]; 
NSDate *capturedStartDate = [dateFormatter dateFromString: timestamp]; 

My capturedStartDate - null.

Для формата даты, я попытался заменить zzz на Z, a и полностью удалить его. Я также пробовал с и без 'T'. Кто-нибудь знает правильный формат для извлечения этой даты из строки?

+0

'[dateFormatter setDateFormat: @" yyyy-MM-dd HH: mm: ss.SSS "];' Я не думаю, что есть смысл захватить больше десятичных точек. В следующий раз подумайте о том, чтобы прочитать документы: http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns – matt

+0

@matt Я не фиксирую эту дату из приложения iOS, m получая его из базы данных. Это только формат, с которым мне приходится иметь дело, поскольку он хранится. Я согласен, миллисекунды могут быть бессмысленными. –

+0

Моя точка зрения заключалась в том, что за пределами трех знаков после запятой NSDate не будет дифференцироваться. Он не имеет такой степени точности. Поэтому '' .SSS '' - это все, что вам нужно. – matt

ответ

1

В вашей строке даты нет часового пояса, поэтому вы должны удалить это Z. Кроме того, у вас есть доли секунды. И в строке даты нет T. Итак, вы хотите

yyyy-MM-dd HH:mm:ss.SSSSSS 

Это задает вопрос о том, какой часовой пояс представляет эта строка. Если это UTC, вам нужно установить часовой пояс форматирования, соответственно.

Кроме того, вы можете быть осторожны с пользователями с не-григорианскими календарями. См. Apple Technical Q&A 1480 относительно установки locale на en_US_POSIX.

+0

Thats it, также мне пришлось удалить '' T'', если я его не удалю, тогда дата вернет нуль –

+0

Согласен. Также нужно удалить «T». – Rob

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