Использование 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")
Другие вопросы по тегам