2012-05-13 8 views
2

私はこれを検索しており、それを見つけることはできませんでした。私は、NSDateを含むNSDictionaryにオブジェクトを持っています。現在、標準のNSDateオブジェクトはかなり長いです。私はユーザーをdd-MMM形式で表示したいと考えています。例えばのためにiOSの日付をdd-MMMに設定する

:元の日付は私がNSDateComponentsとNSDateFormatterを使用してみましたが、それは非常に仕事しませんでした日が23 Apr

として表示されたい2012-04-23 00:00:00 +0000であってもよいです。おそらく、私は必要なフォーマットの正しい使い方を考え出していないでしょう。

  NSLog(@"From Dictionary, Date = %@",[tmpDict objectForKey:@"eventDate"]); 
      NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
      [dateFormatter setDateFormat: @"yyyy-MM-dd HH:mm:ss Z"]; 
      NSString *dateString = [tmpDict objectForKey: @"eventDate"]; 
      NSDate *date = [dateFormatter dateFromString: dateString]; 

      NSLog(@"MY DATE: %@",date); 
      NSDateFormatter *dateFormatter2 = [[NSDateFormatter alloc] init]; 
      [dateFormatter2 setDateFormat:@"dd-MMM"]; 
      NSString *formattedDateString = [dateFormatter2 stringFromDate:date]; 
      NSLog(@"Formatted Date: %@",formattedDateString); 

出力はFrom Dictionary, Dateのため2012年5月19日午前七時30分56秒とフォーマットされた日付とMY DATEの場合はnullです:

は、ここでより良い理解のためのコードです。そしてtmpDictは私が使っている辞書オブジェクトです。

ご協力ありがとうございます。

答えて

3

以下からDuncan Cの答えです。

日付が文字列で表される場合は、まず日付を日付に変換してから、NSDateFormatterを使用します。フォーマットと仮定すると、それは次にあなたがdateオブジェクトに現時点で何をしているかを行うことができます

[dateFormatter setDateFormat: @"yyyy-MM-dd HH:mm:ss Z"]; 
NSString *dateString = [dictionaryObject objectForKey: @"eventDate"]; 
NSDate *date = [dateFormatter dateFromString: dateString]; 

だろうと同じままになります。

+0

私はあなたが提案したことを試してみましたが、それはまだ動作しませんでした。試したコードを反映するために質問を編集します。 – proctr

+0

問題は文字列にある日付形式で、2012-04-23 00:00:00 +0000となっていますが、実際は2012-04-23 00:00:00となります。常に2つのうちの1つだけであることを確認し、それに応じてdateFormatter形式を調整する必要があります。 –

2
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"dd-MMM"]; 
NSString *formattedDateString = [dateFormatter stringFromDate:myDate]; 
[dateFormatter release]; 
+0

動作しません。 NSDate * myDate = [tmpDict objectForKey:@ "eventDate"]; NSLog(@ "MY DATE:%@"、myDate); NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@ "dd-MMM"]; NSString * formattedDateString = [dateFormatter stringFromDate:myDate]; NSLog(@ "フォーマット日:%@"、formattedDateString); MY DATEでは出力されますが、formattedDateStringでは出力されません。私はそこにNULLを取得します。 – proctr

+0

最初のログの出力は何ですか? – DrummerB

+0

日付:2012-05-19 07:30:56 フォーマット済み日付:(null) – proctr

1

eventDateというキーを使用して辞書からフェッチしているオブジェクトのように聞こえるのは、日付ではなく文字列です。

は、このコードを試してみてください。

NSDate *myDate=[tmpDict objectForKey:@"eventDate"]; 
NSLog(@"myDate class = %@", [myDate class]); 

私はそれがNSStringのクラスまたはそのサブクラスのではなく、NSDateのいずれかを示して賭けます。

+0

Yep..itはNSStringを参照する__NSCFStringを示します。 回避策はありますか? – proctr

+0

2つの日付フォーマッタを作成する必要があります。それらをinputDateFormatterとoutputDateFormatterと呼ぶことにしましょう。inputDateFormatterは、受信日の形式で日付文字列を受け取り、それをNSDateに変換するように設定されます。次に、結果のNSDateを取得し、outputDateFormatterを使用して出力フォーマットに変換します。私は日付フォーマッタの専門家ではなく、いつも特定の形式で日付を扱う方法を理解するためにドキュメントを歩き回らなければなりません。 –

+0

さて、私もそれを試みましたが、それはまだ動作しません。私は変更を反映するために質問を更新しました。それにもかかわらず、サポートに感謝します。それは非常に高く評価されます。 – proctr

関連する問題