Подтвердить что ты не робот

NSDateFormatter "HH", возвращающий am/pm на устройстве iOS 8

Я сейчас в тупике. Я с удовольствием использовал NSDateFormatter без проблем, но сегодня я заметил, что одно из моих приложений дает мне сумасшедшие результаты на устройстве iPhone 6 plus с iOS 8.1.3, - хотя на других устройствах/симуляторах это кажется прекрасным. В этом есть код:

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; 
[dateFormatter setDateFormat:@"HH"];
NSInteger hour= [[dateFormatter stringFromDate:datetime] integerValue];

Это приводит к (на устройстве) к 0-12-часовой нотации, потому что по какой-то причине, выходящей за меня, если я печатаю [dateFormatter stringFromDate: datetime] в этот момент, я получаю "4 вечера"!

Что мне не хватает?

4b9b3361

Ответ 1

Отредактировано: Чтобы увидеть проблему, в настройках вашего телефона выберите регион, для которого по умолчанию используется 24-часовое время, например "Великобритания" или "Франция". Затем отключите "24-часовое время" из настроек. Теперь, если вы создаете NSDateFormatter без установки его локали, "HH" не будет работать. Чтобы обойти эту проблему, установите языковой стандарт (даже тот, который находится в тот момент в телефоне), например. для вышеуказанного кода мы могли бы добавить:

dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];

Любая локаль будет работать, даже en_GB. Это, очевидно, ошибка, а не какое-то странное представление стандарта юникода, потому что если вы установили регион, который по умолчанию имеет значение 12 часов, ползунок "24 часа времени" не влияет на работу "HH", а если вы находитесь в регионе, который по умолчанию имеет значение 24 часа, тогда этот слайдер в настройках повлияет на то, как работает ваш код.