2016-04-15 150 views
-6

我有以下格式的日期:我只需要在一年以上的日期中提取NSDateFormatter:dateFromString返回nil

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

不知道誰給你downvoted - 對不起。但是我贊成你,所以你不會受到打擊。 – user1107173

0

格式:

yyyy 

不匹配的日期字符串:

1996-08-09T07:00:00Z 

因此[NSDateFormatter dateFromString:]返回nil

你要這個格式:

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

(注意X符爲documented作爲對Z(祖魯時間正確符),但是與@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 '(意思*祖魯時間*)。它支持-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

所以你想從輸入只有一年? –