Преобразование NSString даты в NSDate

Это может быть глупый вопрос, но я не могу найти ответ здесь или в документации.

Я хочу преобразовать NSString, например @ "9/22/2010 3:45 PM" в NSDate.

Я знаю, использовать NSDateFormatter, но проблемы

  • В месяце может быть одна или две цифры
  • Аналогично, дата может быть одной или двумя цифрами
  • Часами может быть одна или две цифры
  • Что мне делать с AM/PM?

Ответ 1

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"MM/dd/yyyy h:mm a"];
NSDate *date = [dateFormat dateFromString:dateStr];
[dateFormat release];

нет проблем в двухзначном или двухзначном месяце.

Это должно помочь вам.

Ответ 2

Вы можете проанализировать NSString в NSDate с помощью класса NSDateFormatter. Для получения дополнительной информации см. документацию:

Экземпляры NSDateFormatter создают строковые представления объектов NSDate (и NSCalendarDate) и преобразуют текстовые представления дат и времени в объекты NSDate.

Ответ 3

У меня была такая же проблема, не знаю, почему NSDateFormatter не работает для меня (iOS5 - Xcode 4.3.2), но это сработало для меня:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
[dateFormatter setDateFormat:@"dd-MM-yyyy"];
NSString *dateString = @"05-06-2012";
NSDate *date;
NSError *error = nil; 
if (![dateFormatter getObjectValue:&date forString:dateString range:nil error:&error]) {
    NSLog(@"Date '%@' could not be parsed: %@", dateString, error);
}
[dateFormatter release];