7

に問題がありNSDateFormatterます。nullいくつかの特定の日付に戻ってきます。

ケースをデバッグするためにこの機能を実行しました:

- (void) debugTest:(NSString *)dateStr{

    NSLog(@"String: %@", dateStr);

    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    [df setDateFormat:@"yyyy-MM-dd"];

    NSDate *dateObj = [df dateFromString: dateStr];

    NSLog(@"Date: %@", dateObj);

}

これは、いくつかの日付のログ出力です。

String: 2012-10-18
Date: 2012-10-18 03:00:00 +0000
String: 2012-10-19
Date: 2012-10-19 03:00:00 +0000
String: 2012-10-20
Date: 2012-10-20 03:00:00 +0000
String: 2012-10-21
Date: (null)
String: 2012-10-22
Date: 2012-10-22 02:00:00 +0000
String: 2012-10-23
Date: 2012-10-23 02:00:00 +0000

日付に対してのみ null を返すのはなぜ2012-10-21ですか?

からの間隔で他のテストを行い2011-10-01 to 2014-11-01、次の日付が返されましたnull:

2011-10-16, 2012-10-21, 2013-10-20, 2014-10-19

これは何かのバグですか?私は何か間違ったことをしていますか?

4

1 に答える 1

5

誰かが同じ問題に遭遇した場合に備えて、登録するためだけに自分の質問に答えます。

日付フォーマッターに [df setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];ANDを追加しました[df setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];

したがって、私の新しいコードは次のとおりです。

- (void) debugTest:(NSString *)dateStr{

    NSLog(@"String: %@", dateStr);

    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    [df setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
    [df setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
    [df setDateFormat:@"yyyy-MM-dd"];

    NSDate *dateObj = [df dateFromString: dateStr];

    NSLog(@"Date: %@", dateObj);

}

問題はデバイスの構成に関連していたと思います.2つのプロパティを設定すると問題が解決しました.

于 2012-10-01T13:13:12.567 に答える