2016-04-15 3 views
-6

У меня есть дата в следующем формате:NSDateFormatter: dateFromString возвращает ноль

NSString *dateString = @"1996-08-09T07:00:00Z"; 

Мне нужно извлечь только год из указанной даты:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setTimeZone:[NSTimeZone systemTimeZone]]; 
    [dateFormat setLocale:[NSLocale currentLocale]]; 
    [dateFormat setDateFormat:@"yyyy"]; 
    [dateFormat setFormatterBehavior:NSDateFormatterBehaviorDefault]; 
    NSDate *date = [dateFormat dateFromString:dateString]; 
    NSLog(@"date : %@", date); 

Вход:

2016-02-15 06:36:47.496 App[46714:5560483] date : (null) 

Я даже попробовал:

[dateFormat setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] 

, но безрезультатно.

enter image description here

+5

'dateFormat' установлен в' NSDateFormatter' явно не соответствует формату 'dateString' – Larme

+1

это может помочь: http://stackoverflow.com/questions/19300032/nsdateformatter-datefromstring-always-returns-nil –

ответ

1

формат даты, как набор

      1996-08-09T07:00:00Z 
[dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"]; 

обновление

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setTimeZone:[NSTimeZone systemTimeZone]]; 
[dateFormat setLocale:[NSLocale currentLocale]]; 
[dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"]; 
[dateFormat setFormatterBehavior:NSDateFormatterBehaviorDefault]; 
NSDate *date = [dateFormat dateFromString:@"1996-08-09T07:00:00Z"]; 
NSLog(@"date : %@", date); 
[dateFormat setDateFormat:@"yyyy"]; 
NSString *finalStr = [dateFormat stringFromDate:date]; 
NSLog(@"finalStr : %@", finalStr); 

выход

enter image description here

+0

проверить обновленный ответ –

+0

downvoters может объяснить, что здесь не так –

+0

не уверен, кто дал вниз, - извините. Но я поддержал вас, чтобы вы не попали. – user1107173

0

Формат:

yyyy 

не соответствует строка даты:

1996-08-09T07:00:00Z 

поэтому [NSDateFormatter dateFromString:] вернулся nil.

Вы хотите этот формат:

yyyy-MM-dd'T'HH:mm:ssZ 

(Обратите внимание на X спецификатор documented как правильный спецификатор для Z (Zulu Time), однако во время дискуссии с @rmaddy, он убедил меня, что Z является исправьте один для использования.)

, а затем извлечь год, используя NSDateComponents.

+0

не уверен, кто дал вниз, - извините. Но я поддержал вас, чтобы вы не попали. – user1107173

+0

Не указывайте 'Z' в формате даты. «Z» в строке даты представляет собой часовой пояс строки. Если вы укажете 'Z' в формате даты, форматтер будет игнорировать' Z' и интерпретировать строку даты как локальное время, а не время UTC. – rmaddy

+0

@rmaddy Некотируемый спецификатор «Z» не [документирован] (http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns) для обработки входного символа 'Z '(значение * zulu time *). Он поддерживает -0800, GMT-8: 00, -08: 00 или -07: 52: 58 в зависимости от того, сколько 'Z' вы указываете. Однако похоже, что 'X'. – trojanfoe

0

Попробуйте эту функцию:

+(NSDate *)convertUTCDateLocal:(NSString*)inputString 
{ 
    NSString *dateFormat = @"yyyy-MM-dd'T'HH:mm:sszz"; 
    //for input 
    NSTimeZone *inputTimeZone =[NSTimeZone timeZoneWithName:@"UTC"]; 
    NSDateFormatter *inputDateFormatter = [[NSDateFormatter alloc] init]; 
    [inputDateFormatter setTimeZone:inputTimeZone]; 

    //NSString *inputString = @"2015-07-31T14:00:00+0000"; 
    [inputDateFormatter setDateFormat:dateFormat]; 
    NSDate *date = [inputDateFormatter dateFromString:inputString]; 

    //for output 
    NSDateFormatter *outputDateFormatter = [[NSDateFormatter alloc] init]; 
    [outputDateFormatter setTimeZone:[NSTimeZone systemTimeZone]]; 
    [outputDateFormatter setLocale:[NSLocale currentLocale]]; 
    [outputDateFormatter setDateFormat: @"yyyy"]; 

    NSString *outputString = [outputDateFormatter stringFromDate:date]; 

    NSDate *outputDate = [outputDateFormatter dateFromString:outputString]; 

    return outputDate; 
} 
+0

не предоставляет год. – user1107173

+0

, так что вы хотите только год со входа? –

Смежные вопросы