iOS iPhone アプリには、iOS 5 でresultDateという名前の有効な NSDate オブジェクトを生成する次のコードが含まれています。
static NSDateFormatter *invariantFmt = nil;
if (!invariantFmt) {
invariantFmt = [[NSDateFormatter alloc] init];
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
[invariantFmt setLocale:locale];
[locale release];
[invariantFmt setDateStyle:NSDateFormatterShortStyle];
[invariantFmt setTimeStyle:NSDateFormatterMediumStyle];
}
NSDate *resultDate = [invariantFmt dateFromString:@"08/04/2010 10:43:39 AM"];
XCode 4.6 および iOS 6.1 にアップグレードした後、そのコードは resultDate に nil を返すようになったため、解析に使用するものが変更されました。リリース ノートには、NSDateFormatter の変更については何も書かれていません。インターネット調査によると、より新しい Unicode UTS Locale 解析標準を使用するように変更された可能性があるということだけが明らかになりました。明らかに彼らは何かを変えました。コードをいじり、既知の有効な NSDate オブジェクトを取得し、同じ NSDateFormatter 設定を適用して NSString を取得した後、iOS 6.1 が代わりにこの文字列を好むことがわかりました: @"08/04/2010, 10:43:39 AM"
唯一の違いは、日付部分の後の余分なコンマです。iOS 6.1 でそれを使用すると、上記と同じコードで有効な日付が返されます。これを見て、なぜそれが違うのか、それとも Unicode の変更なのか、それとも Apple のバグなのかを理解している人はいますか?