Java - parsear de tipo date a tipo string

 
Vista:

parsear de tipo date a tipo string

Publicado por maria (4 intervenciones) el 14/08/2008 09:55:14
Hola.
Estoy programando en java y tengo una base de datos con mysql que despues de hacer la select me devuelve un string con la fecha en formato yyyy-mm-dd, el problema es que necesito parsear el string a un tipo date. Creo que lo q tengo que utilizar es el DateFormat pero me da un error Unparseable date.
El codigo que tengo puesto es :
DateFormat df=DateFormat.getDateInstance(DateFormat.SHORT,Locale.JAPAN);
tmpResult.setFechaNac(df.parse(usuario.getString("f_nac")));
creo que el problema es que con Locale.JAPAN solo sirve para formatos de tipo yyyy/mm/dd y por eso no lo puede parsear.
¿podeis ayudarme? gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:parsear de tipo date a tipo string

Publicado por Mario (199 intervenciones) el 14/08/2008 11:05:15
A simple vista se me ocurren dos soluciones y las dos bastante sencillas.
Para la primera que se me ocurre no tienes que hacer mucho, si quieres usar eso de Locale.JAPAN... solo tendrías que hacer un simple replace de los guiones y cambiarlos por barras oblicuas. Algo así:

String fecha = "2008-08-14";

fecha = fecha.replace("-","/");

Eso haría que tu String fecha tuviese como valor "2008/08/14", así que esa solución sería realmente sencilla.

Por otro lado, una forma que a mi personalmente me gusta más porque así paso un poco de los DateFormat que no me hacen mucha gracia, es la siguiente:

String fecha = "2008-08-14";
int año = -1, mes = -1, dia = -1;
StringTokenizer tokenizer = new StringTokenizer(fecha, "-");
Calendar cal = Calendar.getInstance();
Date date = new Date();

año = Integer.parseInt(tokenizer.nextToken());
mes = Integer.parseInt(tokenizer.nextToken())-1; // Se le resta uno porque los meses se numeran desde el 0 (enero) hasta el 11 (diciembre)
dia = Integer.parseInt(tokenizer.nextToken());

cal.set(año, mes, dia);
date = cal.getTime();

Ese código te crea un objeto Date correspondiente al String "2008-08-14".
Te lo explico un poco por si no entiendes algunas cosas:
- Defino la cadena fecha, que ya la tendrás tú, ya que la obtienes de la base de datos.
- Defino unas variables numéricas donde voy a almacenar los números correspondientes al año, mes y día.
- Defino un objeto StringTokenizer, que sirve para dividir una cadena separada por un caracter o serie de caracteres determinados, que en este caso es el guión "-". Su uso es muy sencillo, inicializas el objeto con la cadena que quieres dividir y con el caracter que hace de separador, y posteriormente cada vez que invocas al método nextToken() te devuelve una "porción" de esa cadena.
- Defino también un objeto Calendar, que es una clase que sustituye en parte a la clase Date, que tiene la gran mayoría de sus métodos "deprecated" (obsoletos).
- Por último defino un objeto Date, que será nuestro resultado.
- En cada variable numérica meto el valor correspondiente, obteniendo cada "porción" de la cadena y convirtiéndola a Integer.
- Al meter el valor numérico del mes, es importante restarle uno, ya que los meses están numerados de 0 a 11, siendo enero el cero y diciembre el once.
- Luego inicializo el objeto Calendar en su constructor, como ves, de forma supersencilla.
- Y finalmente, el método getTime() del objeto Calendar nos devuelve un objeto Date con la fecha deseada.

Aunque te haya escrito una parrafada, el método no tiene ninguna complicación y no es excesivamente largo, pero te lo he desglosado lo máximo posible para que lo entendieses a la perfección.

Si tienes alguna duda en algo concreto no dudes en comentármelo y espero que al menos nos cuentes si has solucionado tu problema y qué solución has escogido.

Un saludo ; )
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:parsear de tipo date a tipo string

Publicado por maria (4 intervenciones) el 14/08/2008 14:27:40
Hola!
Muchas gracias por la ayuda, la verdad es lo has explicado muy bien.
Al final me he decantado por la primera opcion más que nada porque es más corta y de momento funciona todo bien.
Un saludo y muchas gracias otra vez :-)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar