Конвертировать NSString в NSDate результаты в NULL - PullRequest
2 голосов
/ 27 сентября 2010

Я хочу преобразовать следующую дату: 2010-02-01T13: 58: 58.513Z

, которая хранится в 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];

Идеи?

Ответы [ 3 ]

1 голос
/ 27 сентября 2010

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

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

-

Редактировать: Ваши средства форматирования также не совсем правильно. ttt, например, не является допустимым форматером в соответствии с документацией. Официальная документация

Если я сделаю это, я смогу заставить его работать, но это не решит проблему 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];

-

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

[formatter setDateFormat:@"YYYY-MM-dd'T'HH:mm:ss.SSS'Z'"];
0 голосов
/ 27 сентября 2010

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

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

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

попробовать

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

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

Редактировать : [formatter setDateFormat:@"YYYY-MM-dd'T'HH:mm:ss.SSS'Z'"]

0 голосов
/ 27 сентября 2010

Best Guess: в вашем формате даты есть пробел. Попробуйте это:

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];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...