2009-08-07 8 views
5

twitterから戻ってくる日付はFri Aug 07 12:40:04 +0000 2009の形式です。私は問題なしでNSDateに値を割り当てることができます。しかし、私はNSDateFormatterを使用しようとすると、私はnilが私に返されます。私は何が欠けていますか?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を持っていて、それを表す文字列を作成したい場合です。

さらに、日付フォーマッタを使用すると、解釈しようとしている日付文字列と一致しない書式文字列が与えられます。

日付文字列と一致するように書式文字列を変更し、stringFromDate:の代わりにdateFromString:(変数宣言を変更)を使用してください。

11

私は同じ質問をしていましたが、私は上記の答えで解決できませんでした。ので、ここで私のために働いていたものです:

tweetsNSDictionaryオブジェクト、 storyIndexは(テーブルビューで)行のint型の値であること、および TWITTER_CREATED_AT_JSON_KEYは値 created_atと一定の NSStringさでいっぱい NSMutableArrayある
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]; 

dateStrを使用してください。

+1

ありがとう@binnyb。Twitterでフォーマットを "Wed、28 Dec 2011 16:48:59 +0000"に変更したので、最初のフォーマットは次のようになります:[df setDateFormat:@ "eee、dd MMM y yyy HH:mm:ss ZZZZ "]を選択します。 – Motasim

+0

ありがとう私は変更を行った – binnyb

+6

Twitterはフォーマットを再び@ @ eee MMM dd HHに変更したようです:mm:ss ZZZZ yyyy "'(または 'Tue Feb 08 15:54:03 +0000 2011') – lxt

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"] - 何も上記さえずり

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

+0

あなたは正しいでしょう! – kurtanamo

関連する問題