Использование dateFormatter на другом языке
Я бегу кусок кода, который возвращает nil
при работе на iPhone с другой настройкой языка. Пример в коде выглядит так:
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMM d, yyyy, h:mm a"
let thisDate = "Mar 4, 2017, 7:50 PM"
let foundationDate = dateFormatter.string(from: Foundation.Date())
print("As String - thisDate: \(thisDate), foundationDate: \(foundationDate)")
print("As Date - thisDate: \(dateFormatter.date(from: thisDate)), foundationDate: \(dateFormatter.date(from: foundationDate))")
Если я запускаю это, я получаю:
As String - thisDate: Mar 4, 2017, 7:50 PM, foundationDate: okt. 22, 2017, 7:57 PM
As Date - thisDate: nil, foundationDate: Optional(2017-10-22 17:57:00 +0000)
Может кто-нибудь показать, как переопределить настройки клиента так thisDate
не вернет ноль?
1 ответ
Решение
Если вам когда-нибудь понадобится проанализировать строки даты / времени фиксированного формата, которые всегда поступают на фиксированном языке, вам нужно установить языковой стандарт форматера даты так, чтобы он соответствовал данным, которые вы анализируете.
В этом случае лучше всего использовать специальный язык en_US_POSIX
, Это обеспечивает обработку названий месяцев на английском языке независимо от локали пользователя, а также правильную обработку настроек времени 12/24 на устройстве.
dateFormatter.locale = Locale(identifier: "en_US_POSIX")