2010-09-27 2 views
2

Я хочу, чтобы преобразовать следующую дату: 2010-02-01T13: 58: 58.513ZПреобразовать NSString к результатам NSDate в NULL

, который хранится в NSString к и NSDate.

Следующая однако только показывает "NULL" в отладчике

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 

[formatter setDateFormat:@"YYYY-MM-DDTHH:MM:SS.tttZ"]; 

NSLog(@"Output: %@", [formatter dateFromString:@"2010-02-01T13:58:58.513Z"]); 

[formatter release]; 

Идеи?

ответ

1

Вы должны избежать "T" в формате строки с одинарными кавычками.

[formatter setDateFormat:@"YYYY-MM-DD'T'HH:MM:SS.tttZ"]; 

-

Edit: ваши форматтеры не совсем правильно либо. Например, ttt не является допустимым форматером в соответствии с документацией. Official documentation

Если я сделаю это, я могу заставить его работать, но это не решает проблему Z:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"YYYY-MM-DD'T'HH:mm:ss.SSS"]; 
NSLog(@"Output: %@", [formatter dateFromString:@"2010-02-01T13:58:58.513"]); 
[formatter release]; 

-

Edit 2: Бинго, нашел правильный форматировщик ,

[formatter setDateFormat:@"YYYY-MM-dd'T'HH:mm:ss.SSS'Z'"]; 
+0

Как насчет Z? Это все еще недействительно. –

+0

Работая над ним, один момент, Z - не единственная проблема. –

+0

Ну, это отображает что-то еще, кроме нуля. Но это дает мне неправильную дату: 2010-01-01. –

0

Лучший угадай: у вашего формата даты есть пробел. Попробуйте это:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 

[formatter setDateFormat:@"YYYY-MM-DD'T'HH:mm:SS.SSS'Z'"]; 

NSDate *date = [formatter dateFromString:@"2010-02-01T13:58:58.513Z"]; 

NSLog(@"Output: %@", [date description]); 

[formatter release]; 
+0

это принт null тоже. –

+0

Извините. Попробуйте мое исправление, оно печатает для меня. –

+0

Это что-то печатает, но неверная дата. Prints 2010-01-01 –

0

Есть несколько проблем в вашем формате:

  • ММ за месяц, а мм за несколько минут
  • SS не существует, использование сс вместо
  • же для TTT , используйте AAA
  • есть пробел между вашей строкой формата, который выглядит как опечатка, но приведет к сбою

, что часовой пояс Z код подставка для в конце своего времени (2010-02-01T13: 58: 58.513Z)

попробовать

[formatter setDateFormat:@"YYYY-MM-dd HH:mm:ss.AAA'Z'"]; 

Это создаст GMT время, потому что он признает Z закончил a как простую букву, а не как часовой пояс.

Edit: [formatter setDateFormat:@"YYYY-MM-dd'T'HH:mm:ss.SSS'Z'"]

+0

Все еще дает мне: «Выход: (null)». –

+0

AAA для миллисекунд в день, а SSS - для дробных секунд, что, я думаю, является тем, что он имеет в виду. –

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