2009-08-07 69 views
5

從twitter獲取的日期格式爲Fri Aug 07 12:40:04 +0000 2009。我可以毫無問題地將值分配給NSDate。但是,當我嘗試使用NSDateFormatter時,我收到了一個零。我錯過了什麼?如何將日期字符串從twitter設置爲NSDATE

NSDate *createdAt = [messageData objectForKey:@"created_at"]; 
    NSDateFormatter *format = [[NSDateFormatter alloc] init]; 
    [format setDateFormat:@"M/d/yy HH:mm"]; 

    NSString *dateString = [format stringFromDate:createdAt]; 


    label.text = dateString; 

回答

4

如果與@「created_at」鍵相關聯的對象是有效的NSDate對象,則此代碼應該有效。

但是,我猜測它實際上是一個NSString。如果是這樣,它會產生你所描述的行爲。

如果我是對的,上面的代碼片段將NSString對象分配給NSDate引用。 NSDictionary返回無類型的'id'對象,所以編譯器不會給你一個類型不匹配的警告。

您必須使用NSDateFormatter將字符串解析爲NSDate(請參閱dateFromString :)。

-1

首先,你使用stringFromDate:爲什麼?這就是如果你已經有一個NSDate並且想要一個代表它的字符串。

此外,當您使用日期格式化程序時,您會給它一個格式字符串,它與您嘗試解釋的日期字符串不匹配。

更改格式字符串以匹配您的日期字符串,並使用dateFromString:而不是stringFromDate:(伴隨您的變量聲明的更改),它應該工作。

11

我有同樣的問題,我無法解決它與當前上述答案。所以這裏是我工作:

NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease]; 
    //Wed Dec 01 17:08:03 +0000 2010 
    [df setDateFormat:@"eee, dd MMM yyyy HH:mm:ss ZZZZ"]; 
    NSDate *date = [df dateFromString:[[tweets objectAtIndex: storyIndex] objectForKey: TWITTER_CREATED_AT_JSON_KEY]]; 
    [df setDateFormat:@"eee MMM dd yyyy"]; 
    NSString *dateStr = [df stringFromDate:date]; 

其中tweets是一個充滿NSDictionary對象,storyIndex是該行int值(在tableview中)的NSMutableArrayTWITTER_CREATED_AT_JSON_KEY爲常數NSString與價值created_at。使用dateStr無論你想顯示日期

+1

感謝@binnyb。Twitter已將格式現在更改爲「Wed,28 Dec 2011 16:48:59 +0000」,所以第一種格式應該是:[df setDateFormat:@「eee,dd MMM y yyy HH:mm:ss ZZZZ「]。 – Motasim 2011-12-29 19:16:56

+0

謝謝我做了改變 – binnyb 2012-01-03 14:12:51

+6

看來,Twitter已經改變了格式再到'@「eee MMM dd HH:mm:ss ZZZZ yyyy」'(或'Tue Feb 08 15:54:03 +0000 2011') – lxt 2012-03-19 18:50:34

3

它看起來很喜歡,Twitter改變格式一次又一次。現在這些爲我工作。不要忘記設置語言環境。

NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease]; 
//Mon, 29 Oct 2012 12:24:50 +0000 
[df setDateFormat:@"EEE, dd LLL yyyy HH:mm:ss ZZZ"]; 
[df setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease]]; 
NSDate *date = [df dateFromString:[element valueForKey:@"created_at"]]; 
[df setDateFormat:@"yyyy-MM-dd HH:mm"]; 
NSString *dateStr = [df stringFromDate:date]; 

[element valueForKey:@"created_at"] - 從Twitter

0

以上沒有工作對我來說日期 - 嘗試一下本作的Twitter:(我還包含了更好的一個很好的nsdate category顯示日期

lbl = (UILabel *)[cell viewWithTag:16]; 
     NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
     //"created_at": "Tue Jul 09 07:45:01 +0000 2013", 
     [df setDateFormat:@"EEE MMM d HH:mm:ss ZZZZ yyyy"]; 
     NSTimeInterval timeIntveral = [[df dateFromString:[[_twitterArray objectAtIndex:indexPath.row] objectForKey:@"created_at"]] timeIntervalSince1970]; 
     NSDate *date = [[NSDate alloc] initWithTimeIntervalSince1970:timeIntveral]; 

     //will work if you added the nsdate category, linked above 
     NSString *ago = [date timeAgo]; 
     NSLog(@"Output is: \"%@\" %.f", ago,timeIntveral); 
     lbl.text = ago; 

希望這有助於!

+0

任何原因,爲什麼你使用timeIntervalSince1970?你不能只將dateFromString的結果:分配給你的日期變量? – Lope 2013-09-07 15:34:59

+0

從來沒有嘗試過,但你會是對的! – kurtanamo 2013-09-08 11:36:06

相關問題