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

DateFormatter не возвращает дату для "HH: mm: ss"

Вот фрагмент кода:

func mapping(map: Map) {
    time      <- (map["time"], TransformOf<Date, String>(fromJSON: {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "HH:mm:ss"
        //dateFormatter.timeZone = TimeZone(abbreviation: "EEST")
        if let argument = $0 {
            let date = dateFormatter.date(from: argument)
            return dateFormatter.date(from: argument)
        }
        return nil
        }}

$0 - строка с "22:12:00". Я поставил "датировку", чтобы увидеть, что он возвращает, и это нуль. Я искал коды формата здесь: http://waracle.net/iphone-nsdateformatter-date-formatting-table/

Код должен работать на самом деле. Что я делаю неправильно?

EDIT: добавлена целая функция

EDIT2: Я просто заметил, что он работает правильно на iPhone 7 iOS 10.1, но возвращает ноль на iPod 10.1.1 (2016). Это так странно.

4b9b3361

Ответ 1

Из Технических вопросов и ответов QA1480 - NSDateFormatter и Internet Dates (выделение добавлено):

С другой стороны, если вы работаете с датами фиксированного формата, вы должны сначала установить для локали форматера даты нечто подходящее для вашего фиксированного формата. В большинстве случаев лучшим языком для выбора является en_US_POSIX, язык, специально разработанный для получения результатов на английском языке США, независимо от пользовательских и системных предпочтений.

Это предотвратит интерпретацию даты в соответствии с региональными настройками пользователя:

let dateFormatter = DateFormatter()
// Set the locale first ...
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
// ... and then the date format:
dateFormatter.dateFormat = "HH:mm:ss"

// ...

Смотрите также Как лучше всего работать с локалью NSDateFormatter "feechur"? ,