NSDateFormatter не возвращает дату-время для британского региона с 12-часовым набором часов

Этот код работает для каждой комбинации региона / локали, которую я могу определить EXCEPT, если я установил свой телефон в британский регион с 12-часовым набором часов. Может ли кто-нибудь сказать мне, почему?

Это работает для каждого региона, включая Великобританию, с 12-часовым набором часов:

NSDateFormatter *theDateFormatter = [[NSDateFormatter alloc] init]; theDateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ"; NSString *theLastFetchDateString = @"2015-11-13T01:47:52.4630000Z"; NSDate *theLastFetchDate = [theDateFormatter dateFromString:theLastFetchDateString]; 

Это работает во всех регионах. ЗА ИСКЛЮЧЕНИЕМ Великобритании с 12-часовым набором часов:

 NSDateFormatter *theDateFormatter = [[NSDateFormatter alloc] init]; theDateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ"; NSString *theLastFetchDateString = @"2015-11-13T18:14:44.1230000Z"; NSDate *theLastFetchDate = [theDateFormatter dateFromString:theLastFetchDateString]; 

Во втором случае theLastFetchDate всегда равен нулю.

Основное различие, которое я вижу, – это вторая дата, хранящаяся в 24-часовом формате, где синтаксический анализатор находится в 12-часовом формате, но форматтер HH должен иметь возможность справиться с этим, да?

Другая странная вещь, и это, вероятно, всего лишь вещь для показа, – это 12-часовые тактовые форматы Великобритании с часами «am» или «pm», где 12-часовые часы США форматируют их как «AM» или «PM».

Вы разбираете дату RFC 3339 / ISO 8601. Таким образом, вы должны установить locale форматирования en_US_POSIX .

 theDateFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]; 

См. Технические вопросы Q & A 1480 Apple .

Давайте будем гением компьютера.