#objective-c #nsdateformatter
#objective-c #nsdateformatter
Вопрос:
У меня есть простой код, который преобразует дату в строку:
(NSString *)dateStringFromDate:(NSDate *)date {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"];
return [dateFormatter stringFromDate:date];
}
Я бы ожидал, что строка будет выглядеть:
2020-10-19T11:55:29Z
Но вместо этого он выводит строку, подобную этой:
2020-10-19T12:38:06 p.m.Z
Обратите внимание на «p.m.» в выводе. Я не использую символ формата даты «a», поэтому я бы не ожидал увидеть AM или PM.
Когда я запускаю код в симуляторе, он выдает правильный результат. Когда я запускаю его на физическом iPad под управлением iPadOS 14.0.1, он выдает неверный результат.
Я заметил, что принудительное изменение локали с помощью этого устраняет проблему:
dateFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
Но я не уверен, что это правильный подход, поскольку это похоже на ошибку.
Может кто-нибудь пролить свет на то, почему это происходит?
Комментарии:
1. Это из-за локального значения по умолчанию
NSDateFormatter
. Но если вы посмотрите на «am / mp» NSDateFormatter en_us_posix», вы обнаружите множество «проблем». Так что да, вам нужно использовать en_us_posix . Вы iPad, как я полагаю, используете систему AM / MP в своих настройках, нет? Но вас может заинтересовать developer.apple.com/documentation/foundation /. …2. Спасибо за ваш ответ. Есть ли какая-то причина, по которой это не было проблемой до iPadOS 14? Мы никогда не видели этого раньше 14.x.
3. @Larme если бы вы хотели отправить свой комментарий в качестве ответа, я бы пометил его как принятый. Ваш комментарий помог. Спасибо!