2012-04-02 16 views
2

NSDateFormatterを使用してNSDateに変換する機能があります。NSDateFormatter IOSバグ

+(NSDate*)getDateFromCurrentTimestamp:(NSString*)currentTimestamp{ 
// currentTimestamp= @"28-Feb-2012 16:42:19 PM"; 

    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
    [dateFormatter setDoesRelativeDateFormatting:NO]; 
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 
    [dateFormatter setFormatterBehavior:NSDateFormatterShortStyle]; 
    //[NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehaviorDefault]; 
    [dateFormatter setDateFormat:@"dd-MMM-yyyy HH:mm:ss a"]; 

    return [dateFormatter dateFromString:currentTimestamp]; 
} 

IOS 5.xが正しいNSDateを返します。 4.1 & 4.2で実行した場合も、正しいNSDateが返されます。 4.3.2 & 4.3.3で実行すると、nullが返されます。

どのようにできますか?これの任意の回避策ですか?


EDIT

これは、iOSのバグによって引き起こさないです。これは電話自体に関連しています。一部の電話機にデバイスに異なるlocaleが設定されています。だから我々は1つを使用するように強制しなければならなかったlocale

+1

はあなた 'region'および4.3.2&4.3.3デバイスに設定された' locale'ていますか?参照してください[このような質問](http://stackoverflow.com/questions/1559182/how-do-you-interpret-dates-with-nsdateformatter/1559284#1559284) – tipycalFlow

+0

ええ、あなたはおそらく正しい。多分、問題は 'locale'ではなくiosのバージョンに関連しています。私はちょっと試してみる。 – HelmiB

+0

これは次のように動作します: '[dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@" en_GB "] autorelease]];'。ありがとう。あまりにも悪いあなたの答えを受け入れることができない。 – HelmiB

答えて

1

をコメントで:

は、お住まいの地域であり、4.3.2 & 4.3.3デバイスのために設定されているロケール?このSO questionが役立つかどうかを確認してください。

関連するコード:

[dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"] autorelease]]; 
+0

誰かが不思議なことがあれば、 'en_GB'は' UK'と等しくなります。 – HelmiB

1

誰かがこの問題に遭遇したようです。この問題を回避するには、ここまで書かれている:我々の議論からNSDateFormatter is returning null for date in ios 4.3.3

+0

ナー、これは別の問題です... – tipycalFlow

+0

ありがとう、 'substring'は別の方法です。しかし、私はここでそれをしたくありません。 – HelmiB