Преобразование строковой даты в дату

#ios #swift #nsdate #nsdateformatter #swift3

#iOS #swift #nsdate #nsdateformatter #swift3

Вопрос:

 let date = "2016-05-31T19:00:00 02:00"

let dateFormatterWithTime: DateFormatter {
    let df = DateFormatter()
    df.dateFormat = "yyyy-MM-dd'T'HH:mm:ss Z"
    return df
}
let thisIsNil = dateFormatterWithTime.date(from: date)
  

Что не так с форматером? Согласно http://nsdateformatter.com / он возвращает действительную дату, но я получаю ноль от этого

Комментарии:

1. В вашем шаблоне есть пробел перед спецификатором смещения UTC. В вашем значении нет этого пробела. Возможно, это не все, что неправильно, но это то, с чего я бы начал.

2. можете ли вы кратко объяснить, почему вы добавили бы их, поскольку они уже работают?

3. Нет причин устанавливать locale на en_US_POSIX .

Ответ №1:

Ваш formatter должен быть « yyyy-MM-dd'T'HH:mm:ssZ «. Отметьте, что Z, который предназначен для зоны, не имеет промежутка между секундой и зоной в вашей дате, но в вашем формате есть пробел

Следовательно, код должен быть

     let date = "2016-05-31T19:00:00 02:00"

    var dateFormatterWithTime: DateFormatter {
        let df = DateFormatter()
        df.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
        return df
    }
    let thisIsNil = dateFormatterWithTime.date(from: date)

    print("date (thisIsNil)")
  

Журнал вывода:

 date Optional(2016-05-31 17:00:00  0000)