Создание NSDate из NSString - PullRequest
       44

Создание NSDate из NSString

0 голосов
/ 24 января 2012

У меня есть следующее NSString:

NSString * dateString = @"2012-01-24T14:59:01Z";

Я хочу создать NSDate из этой строки.Я посмотрел ссылку на класс NSDate и подумал об использовании dateWithNaturalLanguageString::

Создает и возвращает объект NSDate с датой и временем, указанными в указанной строке.

+ (id)dateWithNaturalLanguageString:(NSString *)string

Параметры string Строка, содержащая разговорный указатель даты, такой как «последний вторник за ужином», «3 часа дня 31 декабря,2001, »« 12/31/01 »или« 31/12/01. » Возвращаемое значение Новый объект NSDate, установленный на текущую дату и время, указанные в строке.

Однако, когда я пытаюсь использовать его следующим образом:

NSDate * date = [NSDate dateWithNaturalLanguageString:dateString];

Я получаю следующую ошибку:

Нет известного метода класса для селектора 'dateWithNaturalLanguageString: '

Ответы [ 4 ]

4 голосов
/ 24 января 2012

Класс NSDateFormatter поможет вам в этой проблеме.И есть много вопросов по этому поводу, например, вот первый: Преобразовать NSString-> NSDate?

http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html

1 голос
/ 24 января 2012

Нашел именно то, что искал здесь .Это дата-время RFC 3339.

- (NSString *)userVisibleDateTimeStringForRFC3339DateTimeString:(NSString *)rfc3339DateTimeString
    // Returns a user-visible date time string that corresponds to the
    // specified RFC 3339 date time string. Note that this does not handle
    // all possible RFC 3339 date time strings, just one of the most common
    // styles.
{
    NSString *          userVisibleDateTimeString;
    NSDateFormatter *   rfc3339DateFormatter;
    NSLocale *          enUSPOSIXLocale;
    NSDate *            date;
    NSDateFormatter *   userVisibleDateFormatter;

    userVisibleDateTimeString = nil;

    // Convert the RFC 3339 date time string to an NSDate.

    rfc3339DateFormatter = [[[NSDateFormatter alloc] init] autorelease];

    enUSPOSIXLocale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease];

    [rfc3339DateFormatter setLocale:enUSPOSIXLocale];
    [rfc3339DateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"];
    [rfc3339DateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

    date = [rfc3339DateFormatter dateFromString:rfc3339DateTimeString];
    if (date != nil) {

        // Convert the NSDate to a user-visible date string.

        userVisibleDateFormatter = [[[NSDateFormatter alloc] init] autorelease];
        assert(userVisibleDateFormatter != nil);

        [userVisibleDateFormatter setDateStyle:NSDateFormatterShortStyle];
        [userVisibleDateFormatter setTimeStyle:NSDateFormatterShortStyle];

        userVisibleDateTimeString = [userVisibleDateFormatter stringFromDate:date];
    }
    return userVisibleDateTimeString;
}
1 голос
/ 24 января 2012

Метод класса dateWithNaturalLanguageString: реализован только в Mac OS X, а не в iOS, поэтому вы получаете сообщение об ошибке.

Чтобы достичь того, что вы ищете, вам нужен NSDateFormatter класс.Класс довольно тяжелый, поэтому сначала вы должны прочитать документацию, чтобы понять, как лучше его использовать.

1 голос
/ 24 января 2012

Попробуйте использовать конструктор dateWithString конструктор или (если это приводит к аналогичной ошибке), попробуйте использовать NSDateFormatter, как описано здесь .

...