Как преобразовать mySQL datetime, возвращаемое в объекте JSON, в дату Swift? - PullRequest
2 голосов
/ 06 августа 2020

У меня есть объект JSON, внутри которого есть дата-время mySQL, которое мне нужно декодировать в Swift и сравнить с другой датой. Как я могу преобразовать это mySQL datetime в дату Swift?

Ниже показано, что возвращается в объекте JSON:

{"startDate": "Sun, 02 Aug 2020 00:00:00 GMT"}

Вот как мы пытались декодировать это:

struct jsonDate: Codable {
    let startDate: String
}

let tempDate = try JSONDecoder().decode(jsonDate.self, from: data)
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
let previousSunday = dateFormatter.date(from: tempDate.startDate)!

Ответы [ 2 ]

2 голосов
/ 06 августа 2020

Исходя из строки, которую вы предоставляете для JSON, формат даты, который вы устанавливаете в программе форматирования, неверен. Установленный вами формат соответствует строкам в формате ISO-8601, например

2020-02-08 00:00:00 Z

, но вместо этого для вашей строки потребуется формат, например

E, dd MMM yyyy HH:mm:ss ZZZZ

.

1 голос
/ 06 августа 2020

Вы можете проанализировать свою строку даты, используя DateFormatter и установив правильный dateFormat:

let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "E, dd MMM yyyy HH:mm:ss Z"
let previousSunday = dateFormatter.date(from: tempDate.startDate)!

Вы можете взглянуть на этот сайт NSDateFormatter.com для получения дополнительной информации .

Примечание

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

dateFormatter.date(from: tempDate.startDate)! // crash if `nil`

и вместо этого указывать значение по умолчанию или выдавать ошибку:

if let previousSunday = dateFormatter.date(from: tempDate.startDate) {
    // previousSunday is valid
} else {
    // throw an error etc.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...