Bezdepbonusu7Программирование: статьи и ответы

Вопрос

NSDateFormatter возвращает нулевые значения dateFromString: iPhone?

Автор вопроса: GopinathОтветов: 3

Работаю в приложении для iPhone. Получаю дату из ответа веб-сервиса. Когда я получаю дату, которую я сохраняю в NSArray. И когда я меняю NSString на NSDate, дата возвращает null. Вот мой код,

  for (int k = 0; k<[dateArray count]; k++)
 {
    NSString *dateStr = [dateArray objectAtIndex:k];
    NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init];
    [dateFormatter1 setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
    [dateFormatter1 setFormatterBehavior:NSDateFormatterBehaviorDefault];
    [dateFormatter1 setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
    NSLog(@"DateStr : %@", dateStr); //Console Output is : 2012-07-09 13:50:07 [For 42nd and above values]
    NSDate *date = [dateFormatter1 dateFromString:dateStr];
    NSLog(@"Date : %@", date); // Console Output is : (null) [For 42nd and above values]
 }

DateArray содержит 43 значения даты из Webservice. NSDateFormatter returns correct NSDate from NSString til 41nd values. Когда 42nd string passing to the NSDateFormatter the output returns "(null)". я пробовал, когда дата снова возвращает значение null, я снова конвертировал dateFromString, возникает ошибка "(null)". Может ли кто-нибудь помочь мне решить эту проблему? Заранее спасибо.

  • Что за строка в 42-м значении? Вы проверили, что это действительная дата и в правильном формате? Nick Bull 10.07.2012
  • @NickBull Спасибо. Это строка из массива 2012-07-09 13:50:07. Я взял это значение и преобразовал его в NSDate, используя тот же NSDateFormatter в другом месте класса. Он возвращает точное значение NSDate. Это действительно. Не могли бы вы помочь мне решить эту проблему? Спасибо. Gopinath 10.07.2012
  • Добавьте NSLog(@"DateStr : %@", dateStr); в строку перед NSDate *date = [dateFormatter1 dateFromString:dateStr];, а затем отредактируйте свой вопрос с помощью вывода консоли. Nick Bull 10.07.2012
  • @NickBull Спасибо. Я отредактировал свой вопрос. Пожалуйста, просмотрите его. Спасибо. Gopinath 10.07.2012
  • Попробуйте использовать getObjectValue:forString:range:error: в NSDateFormatter, а затем изучите причину ошибки. Nick Bull 10.07.2012
  • Дай угадаю: 42-е значение - это первое, у которого значение часа больше 12. Hot Licks 10.07.2012

iosiphonensdateformatternsdatensstring

Ответы

Ответ 1 · рейтинг 10 · gamozzii

Попробуйте использовать заглавную "ЧЧ" вместо "чч". чч - это часы 1-12, ЧЧ - это часы 0-23 - может быть, 13:00 бросает это?

Ответ 2 · рейтинг 2 · aopsfan

Попробуйте везде использовать один и тот же NSDateFormatter и повторите цикл forin. Вы теряете тонну памяти так, как используете сейчас. Я не могу гарантировать, что это решит вашу проблему, но, по крайней мере, это очистит ваш код.

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"];

for (NSString *dateString in dateArray) {
    NSLog (@"Date %@ and index %i: NSDate representation is %@", dateString, [dateArray indexOfObject:dateString], [dateFormatter dateFromString:dateString]);
}

Если это не решит вашу проблему, имейте в виду несколько вещей:

  1. Не устанавливайте timeZone в форматировщике даты. Строки не содержат часовой пояс, поэтому он ничего не сделает.
  2. Также не устанавливайте formatterBehavior. Это автоматически NSDateFormatterBehaviorDefault.
  3. Убедитесь, что первые 41 свидание и остальные ничем не отличаются.

Ответ 3 · Pooja Jalan

вы используете формат "гггг-мм-дд чч: мм: сс" вместо "гггг-мм-дд чч: мм: сс"

чч - это часы 1-12, ЧЧ - это часы 0-23. У вас есть часы в формате 0-23.

[dateFormatter1 setDateFormat:@"гггг-ММ-дд ЧЧ:мм:сс"];

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы