Transformando String a Date – uso de SimpleDateFormat


En uno de los post, se planteo la pregunta ¿cómo puedo transformar un String a Date? Para hacer más interesante el asunto el valor de la variable String estaba en el siguiente formato año-mes-día. En código se vería algo así:

String strFecha “2007-12-25″;

Con anterioridad conocía la existencia de la clase SimpleDateFormat, que hasta ahora la utilicé para “formatear” la salida de un objeto tipo Date. Cuando se imprime en consola un objeto Date se obtiene: Wed Nov 21 12:27:55 COT 2007, pero mi salida debe ser algo así: 21/11/2007. En código sería así:

Calendar calendario = GregorianCalendar.getInstance();
Date fecha = calendario.getTime();
System.out.println(fecha);
SimpleDateFormat formatoDeFecha = new SimpleDateFormat(“dd/MM/yyyy”);
System.out.println(formatoDeFecha.format(fecha));

El primer System.out.println imprime Wed Nov 21 12:27:55 COT 2007, mientras que el segundo imprime la fecha de acuerdo al formato día/mes/año (21/11/2007) que se especifica como parámetro del constructor de la clase SimpleDateFormat.

Pero la clase SimpleDateFormat no solamente me permite “formatear” objetos tipo Date, sino que me permite crear objetos Date a partir de un String que se encuentra en un formato determinado. Es así cómo se puede hacer.

  1. Creamos un objeto SimpleDateFormat y el parámetro del constructor será el formato en el que se encuentra la variable tipo String.
  2. Crear un objeto tipo date, en donde se almacenará la fecha.
  3. Utilizar el método parse de la clase SimpleDateFormat, tener en cuenta que puede lanzar excepciones.

En código:

SimpleDateFormat formatoDelTexto = new SimpleDateFormat(“yyyy-MM-dd”);
String strFecha = “2007-12-25″;
Date fecha = null;
try {

fecha = formatoDelTexto.parse(strFecha);

} catch (ParseException ex) {

ex.printStackTrace();

}

System.out.println(fecha.toString());

Una nota sobre los formatos: si utilizamos una m minúscula estamos diciendo minutos, si utilizamos M mayúscula decimos meses. Aquí pueden encontrar mayores detalles

Powered by ScribeFire.

About these ads

34 comentarios en “Transformando String a Date – uso de SimpleDateFormat

  1. usma dijo:

    si esta muy bien la explicacion , solo q te falto un detalle si tu tienes un formato de fecha dd/MM/YYYY y u string q representa cierta fecha “16/29/2007″ este elemento no genera error, lo q hace es correr el año segun el numero de meses ingresado en el campo . ojo con ese pequeño detalle.

    • Usma. Ese “detalle” se puede cambiar con el método setLenient(boolean arg). Al ponerlo en false fuerza a que la fecha sea válida, en caso contrario tiraría un ParserException. Por default esta en true, permitiendo al parser a tratar de corregir la fecha.

      Por cierto que para JavaME DateFormat solo sirve para dar formato a fechas y no para parsear “strings”

  2. novato dijo:

    Hola, quisiera saber como haria para parsear una fecha con un formato de este tipo “Mon Jun 29 00:04:23 GMT-03:00 2009″
    desde ya muchas gracias.

  3. Eduardo Romero dijo:

    “Hola Mundo”

    Alguien sabe con usar el “SimpleDateFormat” en J2ME necesito realizar las mismas operaciones de conversión de fecha, pero en J2ME no me permite usar esteta clase. Alguna sugerencia?

  4. Shadow Warrior dijo:

    Esto me a ayudado mucho gracias pero ahora solo tenia una duda mas esa fecha q converti a DATE q era String como peudo sumarle un dia si alguien em avisa como es muchas: Gracias

    • Hola Shadow Warrior,

      Te comento que algo me ha ayudado para hacer las sumas es trabajar con las fechas pero expresadas en milisegundos, con un número tipo long, si quiero sumarle 1 día a ese día también lo transforma a milisengundos, suma esos datos y vuelvo a transformarlo en Date y ahí obtengo el resultado. También e visto que el la Clase Calendar tiene un método add, pero no le he usado.

      Saludos

  5. Jorge Luis dijo:

    Tengo un problema para convertir un string a un date de formato (yyyy-MM-dd HH:mm:ss.SSS).

    Me bota error y mi variable date sigue en valor null

  6. juan manuel dijo:

    Hola muchas gracias por el post, quisiera saber como hago para validar si una fecha es mayor que otra por ejemplo if (fecha < fecha1) { etc….

  7. Nicolas Tamayo dijo:

    Hola,
    Tengo dos problemas y al exponerlos, me seria de mucha ayuda su pronta respuesta,
    1.el compilador me dice que hay una ambiguedad, con el Date de la clase sql y con el Date de la clase Util
    reference to Date is ambiguous, both class java.sql.Date in java.sql and class java.util.Date in java.util match
    2.No puedo usar el SimpleDateFormat, creo que es por no importar una libreria, pero no estoy seguro
    gracias

  8. Ezau dijo:

    hola amigo soy algo nuevo en esto de programacion estoy haciendo un aplicacion de escritorio donde muestra hora y feche asta ahora solo he logrado que me muestre la hora bueno lo que quiero es que me muestre la fecha en un formato asi: 18/08/2011 pero me gustaria que la fecha se mueste en un Jlabel

    gracias saludos

    • Hola Ezau, bueno la verdad es q ahora existe un componente el swing llamado FormattedTextField que extiende de JTextField , con este componente podrás darle formato tanto a fechas como a números ya trae algunos formatos genéricos pero también puedes darles tus propios formatos.

  9. Me ayudó, ya que mi código no guarda el año completo, solo las dos últimas cifras.
    Calendar date = Calendar.getInstance();
    date.set(Integer.parseInt(fecha.substring(5, 8)),
    (Integer.parseInt(fecha.substring(3, 4)) – 1),
    Integer.parseInt(fecha.substring(1, 2)));

  10. Cesar Luis dijo:

    Muy bueno, en mi caso lo que necesito es ingresar una fecha por teclado tipo 2014-05-31, pero esto tiene que ser tomado para meterlo como parametro de entrada de un call a un stored procedure en donde el parametro es int fecha Date, entonces en el call storedP (?);
    Como hago para que tome mi fecha correctamente?

    Muchas Gracias.

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s