Tengo un objeto JSON que tiene una fecha y hora mySQL dentro que necesito decodificar en Swift y compararlo con otra fecha. ¿Cómo puedo convertir esta fecha y hora mySQL en una fecha Swift?
A continuación se muestra lo que se devuelve en el objeto JSON:
{"startDate": "Sun, 02 Aug 2020 00:00:00 GMT"}Así es como hemos intentado decodificarlo:
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)!Según la cadena que proporciona para el JSON, el formato de fecha que está configurando en el formateador es incorrecto. El formato que establezca coincide con las cadenas con formato ISO-8601, como
2020-02-08 00:00:00 Zpero su cadena requeriría un formato como
E, dd MMM yyyy HH:mm:ss ZZZZen cambio.
Puede analizar su cadena de fecha usando DateFormatter y configurando un dateFormat de fecha correcto:
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)!Puede echar un vistazo a este sitio NSDateFormatter.com para obtener más información.
Nota
Recomiendo no forzar el desenvolvimiento de opcionales:
dateFormatter.date(from: tempDate.startDate)! // crash if `nil`y proporcione un valor predeterminado en su lugar o arroje un error:
if let previousSunday = dateFormatter.date(from: tempDate.startDate) { // previousSunday is valid } else { // throw an error etc. }