2010-03-08 64 views
1

我的代碼是這樣的爲什麼我的NSDateFormatter在解析時返回nil?

NSString *tempDate = [NSString stringWithString:tempReviewData.pubDate]; 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateStyle:NSDateFormatterLongStyle]; 
[dateFormatter setTimeStyle:NSDateFormatterNoStyle]; 
[dateFormatter setDateFormat:@"HH:mm a"]; 

NSDate *newDate = [dateFormatter dateFromString:tempReviewData.pubDate]; 

我newDate在這一點上我不知道爲什麼

+0

您創建該'tempDate'變量和放入它的對象的任何特定原因?你以後不要使用任何一個;您使用從'pubDate'方法返回的原始日期。 –

回答

1

這似乎爲我工作越來越爲零,但它取決於tempReviewData.pubDate格式。

當我使用無效格式,如@"6:30 M",我也得到空。

這是工作:

NSString *tempDate = [NSString stringWithString:@"6:30 PM"]; 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateStyle:NSDateFormatterLongStyle]; 
[dateFormatter setTimeStyle:NSDateFormatterNoStyle]; 
[dateFormatter setDateFormat:@"HH:mm a"]; 

NSDate * newDate = [dateFormatter dateFromString:tempDate]; 
NSString * str = [dateFormatter stringFromDate:[NSDate date]]; 
NSLog(@"date: %@", newDate); 
NSLog(@"str: %@", str); 

輸出:

2010-03-08 22:36:57.904 x[4340:903] date: 1970-01-01 12:30:00 +1000 
2010-03-08 22:36:57.905 x[4340:903] str: 22:36 PM 
1
NSDate *newDate = [dateFormatter dateFromString:tempReviewData.pubDate]; 

是否pubDate返回一個NSString,或一個NSDate?

如果它返回一個字符串,那麼你應該重命名該屬性以清楚地表明。

如果它返回一個日期(NSDate),那麼試圖將其解析爲一個字符串將不起作用,因爲它不是一個字符串;此外,你可以刪除所有這些格式化程序代碼,因爲你已經有了你之後的日期對象。

0

看來NSDateFormatter變得非常挑剔。

-(void)dateFormatterTests { 
    NSDateFormatter *formatter; 

    formatter = [[NSDateFormatter alloc] init]; 

#ifdef WORKS 
    [formatter setDateFormat:@"yyyy-MM-dd"]; 
#elif defined(ALSO_WORKS) 
    [formatter setDateFormat:@"yyyy MM dd"]; 
    [formatter setLenient:YES]; 
#else // DOESN'T WORK 
    [formatter setDateFormat:@"yyyy MM dd"]; 
#endif 

    // Works per comments above 
    NSLog(@"dFS: %@", [formatter dateFromString:@"2010-01-13"]); 
    // Never works with any of the above formats 
    NSLog(@"dFS: %@", [formatter dateFromString:@"2010-01-13 22:00"]); 

    [formatter release]; formatter = nil; 
} 
相關問題