Foros del Web » Programación para mayores de 30 ;) » Java »

Pasar de String a patrón Date específico

Estas en el tema de Pasar de String a patrón Date específico en el foro de Java en Foros del Web. Hola, de una página jsp recogo un String cuyo valor es una fecha, tal como: Mon Jan 02 10:00:00 CET 2006 Quiero crear un tipo ...
  #1 (permalink)  
Antiguo 26/01/2006, 12:44
msi
 
Fecha de Ingreso: marzo-2005
Mensajes: 70
Antigüedad: 19 años, 2 meses
Puntos: 0
Pasar de String a patrón Date específico

Hola, de una página jsp recogo un String cuyo valor es una fecha, tal como:

Mon Jan 02 10:00:00 CET 2006

Quiero crear un tipo Date para almacenar esa fecha y operar luego pero me da un error al intentar pasarla:

SimpleDateFormat sdf1 = new SimpleDateFormat("E M dd HH:mm:ss z yyyy");
Date datehora = sdf1.parse(StringRecogido);

En la documentación de SimpleDateFormat no he visto nada para CET así que no sé si el patrón "z" es el correcto.

Cualquier ayuda será agradecida.
  #2 (permalink)  
Antiguo 26/01/2006, 13:53
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Hola,
Hay dos "fallos":

.- El primero es que la 'M' dentro del formato significa el numero de mes (1 para enero en el ejemplo). Para cogerte el nombre corto del mes deberias poner MMM.
.- El segundo es que el SimpleDateFormat lo estas creando sin especificar el "Locale", asi que por defecto cogerá el de la maquina virtual y como el S.O. lo tendras en español... pues no puedes pasarle los nombres en inglés.

Si el formato de fecha que tienes es ese, entonces el SimpleDateFormat deberia ser:
SimpleDateFormat sdf1 =
new SimpleDateFormat("E MMM dd HH:mm:ss z yyyy",Locale.ENGLISH);

La forma de encontrar los fallos ha sido hacer el camino inverso:
System.err.println("Fecha: " + sdf1.format(new Date()));
... mirar lo que sale y leer con el API con cuidado. Estas clases suelen ser un pelin quisquillosas y hay que leerselo mirando los detallitos. Lo del Locale ha sido una inspiración por que no es la primera vez que los valores por defecto me hacen alguna de estas.

Un saludo
  #3 (permalink)  
Antiguo 26/01/2006, 14:59
msi
 
Fecha de Ingreso: marzo-2005
Mensajes: 70
Antigüedad: 19 años, 2 meses
Puntos: 0
Pués muchas gracias. Jamás hubiera pensado lo de Locale. He visto que tenía como idioma del navegador Español y según tus pruebas resultaba como:

jue ene 26 21:46:29 CET 2006

He puesto tus 2 cambios y funciona bien.

Te debo una.


Dicho esto me ha surgido una duda (que no problema). El origen de esta fecha remonta desde que la leo de la BD (tipo datetime "yyyy-MM-dd HH:mm:ss"). Este Date lo envio a la página jsp mostrando sólo la "HH:mm" pero el caso es que si muestro aparte todo el Date me aparece como:

Mon Jan 02 10:00:00 CET 2006

Luego ya viene lo que he comentado antes para recoger este String y pasarlo otra vez a Date, pero me pregunto yo:

Si tengo el idioma en "Español" ¿no debería haber salido este Date también en Español al mostrarse? (este valor no lo modifico, solamente lo muestro en pantalla).

No termino de entender como al recoger ese Date lo recoge en "Español" pero para mostrarlo no.

Bueno, sólo es por curiosidad.

Un saludo.

Última edición por msi; 26/01/2006 a las 15:21
  #4 (permalink)  
Antiguo 26/01/2006, 16:30
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Parece ser que el problema viene de que al mostrar el Date (Date.toString()) lo muestra por defecto en inglés pero que la clase que lo recoge es SimpleDateFormat y usa el Locale por defecto de la maquina virtual.

Parece una desafortunada inconsistencia entre las dos clases al decidir que valores usar por defecto. Para estar seguro lo mejor es formatear tambien la fecha en la salida usando exactamente el mismo SimpleDateFormat que vas a usar para recibirla. Así al menos es coherente.

Se podría poner un bug sobre eso, pero como muchos programas seguro que dependen de eso para su funcionamiento, incorrecto pero real, no estoy muy seguro de que lo cambiaran.
  #5 (permalink)  
Antiguo 27/01/2006, 01:56
msi
 
Fecha de Ingreso: marzo-2005
Mensajes: 70
Antigüedad: 19 años, 2 meses
Puntos: 0
Creo que gracias a tí he aprendido una cosa muy interesante.
  #6 (permalink)  
Antiguo 23/12/2011, 15:27
 
Fecha de Ingreso: noviembre-2010
Mensajes: 29
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Pasar de String a patrón Date específico

si consultas en la descripción de la clase explica cual es el formato que tiene

http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html


http://javahelp.redsaltillo.net
  #7 (permalink)  
Antiguo 24/12/2011, 07:01
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Pasar de String a patrón Date específico

Si solo lo hubieras puesto hace casi 6 años ... -_-"
  #8 (permalink)  
Antiguo 19/03/2012, 12:23
 
Fecha de Ingreso: noviembre-2010
Mensajes: 29
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Pasar de String a patrón Date específico

pues lo pongo como información para los que les vuelva a surgir el mismo problema
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 08:32.