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

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

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

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

  1. Месяц может быть одной или двумя цифрами
  2. Точно так же дата может состоять из одной или двух цифр.
  3. Часы могут быть одной или двумя цифрами
  4. Что мне делать с AM/PM?

person Kevin    schedule 02.12.2010    source источник


Ответы (3)


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

нет проблем с 2-значным днем ​​или 2-значным месяцем.

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

person Ishu    schedule 02.12.2010
comment
Я получил от этого 20.11.2010 14:00 до 2009-12-27 19:00:00 GMT. Что не то же самое, очевидно. - person Kevin; 02.12.2010
comment
Да, я использую именно это. Вот мой код: NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@MM/dd/YYYY h:mm a]; NSDate *date = [dateFormat dateFromString:dateString]; НСлог (строка даты); NSLog(%@, дата); - person Kevin; 02.12.2010
comment
Извините, это @ в последнем NSLog, но все же. Это не работает. Просто возвращает неправильную дату. - person Kevin; 02.12.2010
comment
Ах, исправлено путем поиска форматов даты Unicode. Это должно быть Ys в нижнем регистре. как в гггг, а не ГГГГ. - person Kevin; 02.12.2010
comment
Хорошо, хорошо @MM/dd/yyyy h:mm a используйте это, кроме @MM/dd/YYYY h:mm a - person Ishu; 02.12.2010
comment
Он работает правильно, и когда вы печатаете объекты даты в NSLog, вы видите 2009-09-22 00: что-то вроде этого, но когда вы конвертируете это в свою строку обратно в том же формате, вы получаете ту же строку. - person Ishu; 02.12.2010
comment
Хорошо, хорошо, ты доберешься до моего комментария. - person Ishu; 02.12.2010
comment
я также меняю свое решение. Для дальнейшей помощи другим. - person Ishu; 02.12.2010

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

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

person Cameron Spickert    schedule 02.12.2010

У меня была та же проблема, не знаю, почему у меня не работает 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];
person hackaroto    schedule 07.06.2012