iOS の NSDateFormatter で、シミュレーターと実際のデバイスの両方で Settings/General/International/Calendar が日本語または仏教徒に設定されている場合に問題が発生します。言語が何に設定されているかは問題ではないようで、地域形式は物事を再配置するだけです (しかし、それでも悪いです)。以下の結果はすべて、「Language」= 英語、「Region Format」= 日本の場合です。
これが私のコードです(ARCが有効になっています):
// Configure the Date Formatter
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:[NSLocale currentLocale]];
[dateFormatter setDateStyle:NSDateFormatterShortStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
// Format the date string
NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];
そして結果:
- iOS 4.3 (カレンダー = 日本語)、dateString = “平成 24/04/13”</li>
- iOS 5.1 (カレンダー = 日本語)、dateString = “H.24/04/09”</li>
- iOS 4.3 (カレンダー = 仏教)、dateString = “BE2555/04/13”</li>
- iOS 5.1 (カレンダー = 仏教)、dateString = “BE2555/04/13”</li>
このリンクを見つけました: http://www.cocoanetics.com/2011/12/ios-5-breaking-nsdateformatter/、これは興味深いですが、実際には解決策を示していません。これも見つけました: NSDateFormatter and Japanese calendar、コードを少し変更しました:
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:[[NSLocale preferredLanguages] objectAtIndex:0]]];
次に、私の結果は次のとおりです(これらはすべて私には間違っているように見えます。これは本質的にUS MM / DD / YY形式です):
- iOS 4.3 (カレンダー = 日本語)、dateString = “4/13/12”</li>
- iOS 5.1 (カレンダー = 日本語)、dateString = “4/13/12”</li>
- iOS 4.3 (カレンダー = 仏教)、dateString = “4/13/12”</li>
- iOS 5.1 (カレンダー = 仏教)、dateString = “4/13/12”</li>
上記のすべての結果のうち、私には正しいように見えるのは、Calendar = Japanese の iOS4.3 だけです。
何か案は?