Как я могу декодировать строку даты в объект Date из JSON? - PullRequest
0 голосов
/ 22 апреля 2020

Как я могу декодировать метку времени в Date из JSON?

Я получаю свою дату с сервера как Json вот так:

{

        "date": "2610-02-16T03:16:15.143Z"

    }

и я пытаюсь построить Класс даты из него:

class Message : Decodable {

  var date: Date

}

не работает, как ожидалось Я получаю эту ошибку:

Failed to fetch messages: typeMismatch(Swift.Double, Swift.DecodingError.Context(codingPath: [_JSONKey(stringValue: "Index 0", intValue: 0), CodingKeys(stringValue: "date", intValue: nil)], debugDescription: "Expected to decode Double but found a string/data instead.", underlyingError: nil))

1 Ответ

0 голосов
/ 23 апреля 2020

При декодировании информации о дате, подобной этой, вам нужно использовать пользовательский dateDecodingStrategy и установить часовой пояс и локаль анализатора даты:

let data = """
{
    "date": "2610-02-16T03:16:15.143Z"
}
""".data(using: .utf8)!

struct Message: Codable {
    let date: Date
}

let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.timeZone = TimeZone(identifier: "GMT")
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .formatted(formatter)

do {
  let message = try decoder.decode(Message.self, from: data)
  print(message.date)
} catch {
  print(erroor)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...