Date из String с использованием DateFormatter, возвращающего ноль - PullRequest
0 голосов
/ 08 октября 2018

У меня есть строка типа yyyy-MM-dd, и я хочу создать Date с этим.

static func dateFromStringWithBarra(date : String) -> String {
    print("DATE: \(date)")
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd"
    let date_from_format = dateFormatter.date(from: date)
    print("date_from_format: \(date_from_format)")
    dateFormatter.dateFormat = "dd/MM/yyyy"
    print("date_from_format: \(date_from_format)")
    return dateFormatter.string(from: date_from_format!) // <- nil
}

ВЫХОД:

DATE: 2018-11-04 date_from_format: nil date_from_format: nil

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

У меня была та же проблема, моя была решена по какой-то причине, просто добавив локаль в DateFormatter:

let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "es_MX_POSIX")

Надеюсь, это поможет.

0 голосов
/ 08 октября 2018

Несколько вещей об этом коде:

1) Не уверен, почему вы используете два разных формата даты. 2) Следует избегать, если возможно, использования принудительного развертывания, в этом случае, вероятно, будет хорошим выбором Guard.

То есть код должен выглядеть примерно так:

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"

guard let date_from_format = dateFormatter.date(from: date) else {
    return ""
}
return dateFormatter.string(from: date_from_format)
...