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.
- Creamos un objeto SimpleDateFormat y el parámetro del constructor será el formato en el que se encuentra la variable tipo String.
- Crear un objeto tipo date, en donde se almacenará la fecha.
- 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.
Gracias, esta página me ayudó muchísimo.
julio tonto
Anda que tu xD
Gracias, es de mucho ayuda para nosotros los novatos
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»
Gracias por el aporte.
Gracias por esta pagina me ayudo mucho
y si quiero obtener la fecha directamente de un JTextField? esque necesito guardar un campo date en una base de datos, pero no se como :S
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.
«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?
Muchas gracias por la información. Me ha sido muy útil.
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
Muchisimas gracias!! súper útil
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
Muchas gracias, aprendí mucho del post y de los comments.
Excelente artículo, de gran ayuda
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….
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
gracias me ha servido para modulo de almacen:::estoy muy agradecido
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.
Soy estudiante de DAM1,esta página me ha ayudado mucho,gracias 🙂
Muchas gracias! Siempre me salva de apuro!
La clase del Date es txt.Date o sql.Date?
La clase del Date es util.Date o sql.Date?
Hola Mikey,
La clase es java.util.Date
Saludos
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)));
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.
Hola me parece que la mejor opción es usar la clase Date que está dentro del paquete java.sql. No he tenido experiencia en casos así, pero de seguro es sencillo.
Hola, una pregunta : Tengo una propiedad fechaVersion() de tipo Calendar y me piden implementar una propiedad derivada de ésta llamada StrFechaVersion de tipo String. El valor de esta propiedad será una representación de la fecha contenida en la propiedad fechaVersion con el formato numérico «día/mes/año».
¿por favor alguien que lo sepa? no paro de darle vueltas y sigue fallándome el código.
Muchas gracias 🙂
En la instancia de tu objeto SimpleDateFormat le mandas como parámetro el String tal como quieres que se muestre formato = new SimpleDateFormat(«dd-MM-yyyy»)
El metodo form de SDF recibe un objeto Date y te devuelve un String
Espero te sirva
Hola, nose si me pueden ayudar, pero tengo una variable tipo String que es fecha, que recupero desde un html que tiene como valor ‘2014-12-06’ y quiero convertir a una variable de tipo Date, porque en mi base de datos mi atributo fecha esta en tipo Date,pero no me funciona y no se que hacer, si alguien puede ayudarme porfavor.
Seguramente el date en tu BD es de tipo sql
Primero revisa que la clase que estes importando en tu DAO sea sql.Date
cuando vayas a escribir la fecha haz un casting
Suponiendo que tienes un PreparedStatement para hacer la escritura
ps.setDate ((Date)bean.getFecha ());
Espero que te pueda ayudar
hola a todos saben como combertir una cadena a ahora tipo java.util.Date ejem. 02:30 am
SimpleDateFormat tiene un método para parsear una cadena en Date
SimpleDateFormat format = new SimpleDateFormat();
Date fecha = format.parse(«aquí tu fecha en String o la variable donde guardas el String»);
El método tira una excepción así que debes atraparla con un try catch o hacer tu método throwable
Saludos!!!
Gracias bro es muy util y sencilla tu explicacion