1

xcode、objective cを使用し、ios 5以上をターゲットとするiphoneアプリに取り組んでいます。私がやろうとしているのは、文字列を日付に変換することだけです。私はこれについて多くのことを読みましたが、それは単純で簡単な作業であるはずです。私はフォーラムでこのような他の多くの質問を見てきましたが、人々のために働いていることは私のために働いているようには見えません. これが私がやっていることです

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSString *dobText = [dict valueForKey:@"DateOfBirth"];
NSDate *dobDate = [dateFormatter dateFromString:dobText];

dobText は常に @"1999-01-01" の形式であり、日付フォーマッタで設定された日付形式と一致しますが、文字列から日付を使用した場合の結果は常に nil です。

誰かが私にこれを説明して、それを修正する方法を教えてもらえますか?

4

4 に答える 4

0

デバイスのユーザー設定を確認します。ドキュメントには次のように書かれています。

フォーマット文字列(setDateFormat :)を設定すると、原則として正確なフォーマットが指定されますが、実際には、ユーザーの設定によって上書きされる場合もあります。詳細については、データフォーマットガイド を参照してください。

于 2012-07-23T11:46:34.987 に答える
0
于 2012-07-23T11:44:33.827 に答える
0

bigkm が言うように、あなたのダッシュが邪魔になっているのではないかと思います。

最初にダミー文字列を試してみることをお勧めします。例えば

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSString *dobText = @"1999-01-01" // [dict valueForKey:@"DateOfBirth"];
NSDate *dobDate = [dateFormatter dateFromString:dobText];

今、それはうまくいきますか?そうすべき。別の方法で三角形分割します。

  1. dob テキストからダッシュを完全に削除して、「yyyyMMdd」の形式になるようにします。
  2. 日付フォーマッターにこれと同じ形式を探してもらいます

それは動作しますか?そうすべき。そして、それはあなたのフォーマットの区切り文字が問題であり、さらに検査(または bigkm が示唆するようにクレンジング)が必要であることを証明します。

サイド ノードの再スレッド化: NSDateFormatter は、それが作成されたスレッドで使用する場合は問題ありません。そうしないと、アプリがクラッシュすることがわかります。

于 2012-07-23T14:18:17.857 に答える
0

日付形式が正しい場合は、NSLocale を NSDateFormatter に設定することをお勧めします。

私にとって、このコードはシミュレーターで動作します:

NSString *format = [NSString stringWithFormat:@"EEE, dd MMM yyyy HH:mm:ss Z"];
NSDateFormatter *df = [NSDateFormatter new];
[df setDateFormat:format];
NSDate *date = [df dateFromString:pubDateSttring];

ただし、デバイスの日付は常に NIL です。

NSLocale を設定する回避策を見つけました:

df.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
于 2014-03-04T15:59:49.603 に答える