2011-01-10 4 views
2
NSDateFormatter *isoDateFormatter = [NSDateFormatter new]; 
[isoDateFormatter setDateFormat:@"yyyy-MM-dd"]; 
[isoDateFormatter setTimeZone:[NSTimeZone systemTimeZone]]; 
[isoDateFormatter setFormatterBehavior:NSDateFormatterBehaviorDefault]; 
NSString * str = [isoDateFormatter dateFromString:@"2008-12-31T12:00:00"] 

4.0 on the IOS上記のコードは、strがnillであり、IOSではこれがうまく動作します。strは2008-12-31です。 この問題を解決するにはどうすればよいですか?NSDateFormater dateFromString:

+0

これはiOS 3で機能するというバグは、dateFromString:はNSStringを返さず、NSDateを返さないため、機能よりもバグです。あなたのコンパイラは警告を出して、あなたにも話しています。それらを読みます。 – fresskoma

+0

http://stackoverflow.com/questions/3212214/for-iphone-os-4-0-datefromstring-method-of-nsdateformatter-returns-nilのコピー –

答えて

3

dateFromString: 受信者の現在の設定を使用して解釈された、指定された文字列の日付表現を返します。

- (NSDate *)dateFromString:(NSString *)string 

パラメータ 文字列 解析する文字列。 戻り値 文字列の日付表現は、受信者の現在の設定を使用して解釈されます。

利用可能時間 iOS 2.0以降で使用できます。 関連項目

– getObjectValue:forString:range:error: 
– stringFromDate: 

関連サンプルコード URLCACHE は

NSDateFormatter.h 

で宣言docsをお読みください。

dateFromStringは、NSStringではなくDateオブジェクトを返します。

+3

+1これはなぜ投票されたのですか? – fresskoma

+0

この回答は恐らく文書の再記述であるように思われるのでおそらく投票されたでしょう。単純に「dateFromStringは文字列を返さず、日付を返します」とすれば、それはより明確に質問に関連します。私はそれをdownvoteしませんでしたが、人々が "RTFM、あなたはばかだ"スタイルの答えで質問に答えるときに私を悩まします。 –

13

日付をある文字列形式から別の文字列形式に変換したいようです。これを行うには、2つのステップで行う必要があります。つまり、FROM文字列をNSSDateにフォーマットし、次にその日付からNSStringにフォーマットする必要があります。

NSDateFormatter *dateWriter = [[NSDateFormatter alloc] init]; 
NSDateFormatter *dateReader = [[NSDateFormatter alloc] init]; 
[dateWriter setDateFormat:@"yyyy-MM-dd"]; 
[dateReader setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"]; 

NSDate *dateTmp = [dateReader dateFromString:@"2008-12-31T12:00:00"]; 
NSString *str = [dateWriter stringFromDate:dateTmp] 
//str now contains "2008-12-31". 

//and don't forget!!! 
[dateReader release]; 
[dateWriter release]; 

したい場合は、読書DATEFORMATをリセットしてから書き込むことによって1つの日付フォーマッタと同じ結果を得ることができました。私はちょうどこれのようにそれを配置したので、プロセスを見て簡単です。

サイドノート - 私は常にNSDateFormattersをリリースすることを忘れています。 ClangとInstrumentsは常に私にそれらを漏らしているのを捉えています。私はそれらを使用すると思うし、彼らは完了したように感じる。彼らはそうではありません!だから私より賢くなり、あなたのメモリ管理のNARCを忘れないでください!

サイドノート2 - コンパイラの警告を無視しないでください。あなたのコンパイラはあなたが行っている無効な割り当てについて警告していますが、無視しています。

+0

感謝してくれました.... – Leena

関連する問題