¿Cómo formatear fechas en Java, pudiendo recibir fechas en distintos formatos?

publicado por: Anonymous

Quiero tener el siguiente formato de fecha al realizar un System.out.println(): 21/05/2018 13:11:12 (dd/MM/yyyy HH:mm:ss), independientemente del formato con el que se reciba el String que creará la fecha.

Utilizo las clases

import java.util.Date;

import java.text.DateFormat;

java.text.SimpleDateFormat;

para darle formato correcto, y utilizo esta forma, con una fecha con un solo formato concreto (la idea es poder interpretar la fecha que recibe el codigo, independientemente del formato en el que entre):

SimpleDateFormat fec = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
Date date = fec.parse("2018-05-21T13:11:12");
System.out.println(DateFormat.getDateInstance().format(date));

Pero no me deja crear la fecha con cualquier formato

solución

No se puede.

Para empezar, “independientemente del formato que se entre” es definitivamente demasiado amplio. Incluso si nos limitamos a formatos más convencionales, es imposible decidir si “05/12/11” es “5 de diciembre de 2011” o “12 de mayo de 2011” o “11 de diciembre de 2005” o … El conversor necesita información externa para saber qué significa cada dígito, que es por lo que tú le indicas cuál es el formato esperado.

Naturalmente, cuando el dato introducido no se corresponde con el formato esperado, la conversión falla, pues es lo más seguro.

Siempre puedes poner una lista de SimpleDateFormat con los distintos formatos y probarlos hasta que uno no falle. No lo recomiendo, porque hará conversiones que el usuario no esperará. Una vez introducirá “01/12/2018” y lo leerá en un formato, otra vez introducirá “01/13/2018” y lo leerá en otro.

Si lo que quieres es simplemente “que me pueda poner la fecha con o sin hora”, entonces es más sencillo. En general recomendaría usar una expresión regular (mira la clase Pattern) para evaluar si la cadena incluye la hora o no, y según eso usa el SimpleDateFormat adecuado o añade una hora “por defecto” al final de la cadena.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *