Это потому, что данное устройство не настроено для григорианского календаря. Он использует буддийский календарь. См. Apple Technical Q&A 1480, в котором обсуждается правильная обработка строк даты, чтобы изящно обрабатывать международные календари.
Если этот формат yyyy-MM-dd HH:mm:ss
предназначен для внутренних целей (хранение в базе данных, связь с веб-службой и т. Д.), Вы должны рассмотреть возможность установки языкового стандарта форматирования на en_US_POSIX
. В Swift 3:
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
в Swift 2:
dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
Честно говоря, это также возникает вопрос относительно того, что часовой пояс строковое представление даты используется. Обычно вы хотели бы убедиться, что строки даты/времени постоянно сохраняются в формате UTC/GMT. В Swift 3:
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
Или в Swift 2:
dateFormatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)
Если вы сделаете это последовательно в течение всего приложения, вы будете избегать странные вопросы часового пояса (например, если кто-то в Нью-Йорке сообщений что-то прямо сейчас , Я не хочу, чтобы он рассказывал мне в CA, что это произошло три часа назад).
Это, без сомнения, потому, что 'locale' для данного устройства не настроен для григорианского календаря. Если этот формат 'yyyy-MM-dd HH: mm: SS' предназначен для внутренних целей (сохранение в базе данных, связь с веб-службой и т. Д.), Вам следует рассмотреть возможность установки' locale' форматирования на 'en_US_POSIX'. См. [Technical Q & A 1480] (https://developer.apple.com/library/content/qa/qa1480/_index.html). – Rob
Это что-то, что я мог бы сделать глобально для всего приложения в appDelegate, или это то, что я должен делать для каждого dateFormatter, который я использую в приложении. – Alk
Он в основном используется для отображения того, как давно сообщение/комментарий были отправлены другим пользователям app – Alk