2012-01-24 3 views
0

У меня есть следующие NSString:Создание NSDate из NSString

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

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

Creates and returns an NSDate object set to the date and time specified by a given string.

+ (id)dateWithNaturalLanguageString:(NSString *)string

Parameters string A string that contains a colloquial specification of a date, such as “last Tuesday at dinner,” “3pm December 31, 2001,” “12/31/01,” or “31/12/01.” Return Value A new NSDate object set to the current date and time specified by string.

Однако, когда я пытаюсь использовать его как это:

NSDate * date = [NSDate dateWithNaturalLanguageString:dateString]; 

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

No known class method for selector 'dateWithNaturalLanguageString:'

+0

Состояние документа, которое: «Это может дать неожиданные результаты, и его использование сильно обескуражено.» В разделе обсуждения. Также 'dateString' действительно является естественной строкой языка? этот метод не входит в iOS SDK –

+0

Возможный дубликат http://stackoverflow.com/q/4380381/1114171 –

+0

Возможно, нет ... Не получилось попробовать все равно. Вы рекомендуете какое-либо другое решение? – Dimme

ответ

1

Найдено точно, что я искал here. Это дата-время 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

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

+0

нет такого метода на iOS –

+0

Вы правы Я искал библиотеку разработчиков Mac OS X вместо библиотеки разработчиков iOS. Проклятия. 'NSDateFormatter' это. – Stephanie

1

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

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