Quiero analizar esta fecha en este formato 2021-11-03T14:09:31.135Z ( message.created_at )
Mi código es este:
val dateFormat = SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS") var convertedDate = Date() try { convertedDate = dateFormat.parse(message.created_at) } catch (e: ParseException) { e.printStackTrace() }Está fallando al analizar
No use SimpleDateFormat , está desactualizado y es problemático .
Utilice DateTimeFormatter para analizar la fecha.
fun parseDate() { var formatter: DateTimeFormatter? = null val date = "2021-11-03T14:09:31.135Z" // your date string if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX") // formatter val dateTime: ZonedDateTime = ZonedDateTime.parse(date, parser) // date object val formatter2: DateTimeFormatter = DateTimeFormatter.ofPattern("EEEE, MMM d : HH:mm") // if you want to convert it any other format Log.e("Date", "" + dateTime.format(formatter2)) } }Salida: miércoles, 3 de noviembre: 14:09
Para usar esto debajo de Android 8, use desugaring
Bueno, el formato no es exactamente como se ve la cadena:
T literal entre la fecha y la horahh , que es un formato de 12 horas. Utilice HH en su lugar.Este formato debería hacerlo:
yyyy-MM-dd'T'HH:mm:ss.SSSX Sin embargo, tenga en cuenta que Date y SimpleDateFormat son obsoletos y problemáticos . Utilice java.time en su lugar. Si su nivel de API de Android parece ser demasiado bajo, puede usar ThreeTen Backport .
Si su nivel mínimo de API es 21, puede usar API Deugaring , encuentre algunas buenas explicaciones al respecto aquí .
Tan pronto como haya habilitado API Deugaring, puede analizar directamente su String ISO en un OffsetDateTime :
val convertedDate = OffsetDateTime.parse(message.created_at)