4
NSDateFormatterロケールの「feechur」を処理する最良の方法は何ですか?
それはNSDateFormatter予期せずあなたに噛み付く「機能」を持っているようです:あなたが次のような単純な「固定された」フォーマット操作を行う場合: NSDateFormatter* fmt = [[NSDateFormatter alloc] init]; [fmt setDateFormat:@"yyyyMMddHHmmss"]; NSString* dateStr = [fmt stringFromDate:someDate]; [fmt release]; その後、米国およびほとんどのロケールで正常に動作します...電話が24時間地域に設定されているユーザーは、設定の12/24時間スイッチを12に設定します。結果の文字列の終わり。 (例えば、NSDateFormatterを参照してください、私は何か間違ったことをしていますか、これはバグですか?) (そしてhttps://developer.apple.com/library/content/qa/qa1480/_index.htmlを参照してください) どうやらAppleはこれを "悪い"と宣言している-Broken As Designedで、彼らはそれを修正するつもりはない。 回避策は明らかに、特定の地域、一般的には米国の日付フォーマッターのロケールを設定することですが、これは少し面倒です: NSLocale *loc = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; [df setLocale: loc]; [loc release]; onsies-twosiesではそれほど悪くありませんが、私は約10の異なるアプリを扱っています。最初に見たアプリには、このシナリオのインスタンスが43あります。 マクロ/オーバーライドされたクラス/コードを不明瞭にすることなく、すべてを変更する労力を最小限に抑えるための賢いアイデアはありますか?(私の最初の本能は、NSDateFormatterをinitメソッドでロケールを設定するバージョンでオーバーライドすることです。alloc/ init行と追加されたインポートの2行を変更する必要があります。) 追加されました これは私がこれまでに思いついたものです-すべてのシナリオで機能するようです: @implementation BNSDateFormatter -(id)init { static NSLocale* en_US_POSIX = nil; NSDateFormatter* …