Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Java (http://www.forosdelweb.com/f45/)
-   -   problema al convertir string en date (http://www.forosdelweb.com/f45/problema-convertir-string-date-593896/)

aniMAYtions 05/06/2008 18:07

problema al convertir string en date
 
Hola amig@s:
estoy intentando convertir un String que me iega desde un TextField a Date para luego insertarlo en la base de datos y lo he probado todo, desde el SimpleDateFormat hasta una función que se supone que lo convierte, pero aunque le pida el formato 'yyyy-MM-dd' , por ejemplo si le doy la fecha 2008-12-11, me devuelve Thu Dec 11 00:00:00 CET 2008. Os enseño un poco el código a ver si podeis decirme qué hago mal...
Código:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
fechagasto = tffchgasto.getText();
Date fecha;
try
            {
                fecha = sdf.parse(fechagasto);
                //System.out.println("La fecha es"+fecha);
            }
            catch(Exception e)
            {
                JOptionPane.showMessageDialog(rootPane, "Fallo al convertir la fecha" + e);
            }

Luego la función es la siguiente:
Código:

public Date StrtoDate(String pformat, String pdatestr)
    {        Date date = null;       
            SimpleDateFormat df = new SimpleDateFormat(pformat);       
            try
            {
                date = df.parse(pdatestr);       
            }
            catch (ParseException e)
            {           
                e.printStackTrace();
            }
            return date;

Se supone que ambos métodos deberian devolverme la cadena que le paso en una fecha válida, pero no hay forma...
Mil gracias!!

sanmi69 06/06/2008 04:57

Respuesta: problema al convertir string en date
 
no entiendo tu pregunta:
2008-12-11 es igual a Thu Dec 11 00:00:00 CET 2008.
Q problema hay con la fecha?? que el toString() de la clase Date no se ve como tu quieres???

Isdiar 06/06/2008 10:39

Respuesta: problema al convertir string en date
 
Te recomiendo que te crees una clase Fecha y crees los métodos ahí.
Creo que esto te serviría (ya le añades tú los métodos restantes que te interesen):
Cita:

// Fecha.java

package utilidades;


import java.text.SimpleDateFormat;
import java.util.Date;

public class Fecha
{
private int dia;
private int mes;
private int anno;



public Fecha()
{
dia=0;
mes=0;
anno=0;
}


public Fecha(int dia, int mes, int anno)
{
if(verificar(dia,mes,anno)) {
this.dia=dia;
this.mes=mes;
this.anno=anno;
}
else {
dia=0;
mes=0;
anno=0;
}
}


public Fecha(String cadena)
{
if(!setFecha(cadena)) {
dia=0;
mes=0;
anno=0;
}
}


private boolean verificar(int dia, int mes, int anno)
{
if(mes<=0 || mes >12)
return false;
if(dia<=0 || dia>31)
return false;
if( (mes==4 || mes==6 || mes==9 || mes==11) && dia>30)
return(false);
if(mes==2 && dia>29)
return(false);
if(mes==2 && dia==29 && !bisiesto(anno))
return(false);

return(true);
}


private boolean bisiesto(int anno)
{
if(((anno % 4)==0)&&(!((anno%100)==0)||(anno%400)==0))
return(true);
return(false);
}


public String getString()
{
return(dia + "/" + mes + "/" + anno);
}


public String getStringAnnoMesDia()
{
return(anno+ "/"+ mes + "/" + dia);
}


public String getStringFormatoLargo()
{
return (this.diaSemanal(this.getIntDiaSemana())+","+Integ er.toString(dia)+"de"+this.getStringMes()+"de"+Int eger.toString(anno));
}


public boolean setFecha(String cadena)
{
int dia, mes, anno;
int indice1, indice2;
String cadena1="";
String cadena2="";
String cadena3="";
cadena=cadena.replace('-',' ');
cadena=cadena.replace('/',' ');
indice1=cadena.indexOf(' ');
if(indice1==-1)
return false;
cadena1=cadena.substring(0,indice1);
cadena1=cadena1.trim();
indice2=cadena.lastIndexOf(' ');
if(indice1==indice2)
return false;
cadena2=cadena.substring(indice1+1, indice2);
cadena2=cadena2.trim();
if(indice2+1==cadena.length())
return false;
cadena3=cadena.substring(indice2+1,cadena.length() );
cadena3=cadena3.trim();
mes=Integer.parseInt(cadena2);
if((Integer.parseInt(cadena1)>31 || Integer.parseInt(cadena1)<=0) && Integer.parseInt(cadena3)<=31 && Integer.parseInt(cadena3)>0){ //formato año-mes-dia, o incorrecto
anno=Integer.parseInt(cadena1);
dia=Integer.parseInt(cadena3);
}
else { //formato dia/mes/año, o incorrecto
anno=Integer.parseInt(cadena3);
dia=Integer.parseInt(cadena1);
}
if(verificar(dia, mes, anno)) {
this.dia=dia;
this.mes=mes;
this.anno=anno;
return(true);
}
else
return(false);
}




Dime qué te parece esta solución, si te viene bien o no... Salu2!

GreenEyed 07/06/2008 14:23

Respuesta: problema al convertir string en date
 
Cita:

Iniciado por Isdiar (Mensaje 2438093)
Te recomiendo que te crees una clase Fecha y crees los métodos ahí...

Si Java ya lo tiene hecho, ¿para que hacerlo de nuevo?

Como dice sanmi69, la traduccion de la fecha es correcta, asi que... ¿cual es el problema?

S!

aniMAYtions 07/06/2008 14:44

Respuesta: problema al convertir string en date
 
GreenEyed, perdona si no me he explicado bien...
A ver, io recibo la fecha como una cadena desde un textfield y la cosa es que me gustaría convertirla a un tipo de dato fecha en formato 'yyyy-mm-dd' para luego poder insertarla en una base de datos y trabajar desde ahí con fechas, entonces el formato texto que me devuelve no es lo que busco sino, si en el textfield pongo 2008-06-05 quiero que al convertirlo a Date me devuelva lo mismo, 2008-06-05.
Gracias!!

magneto 08/06/2008 16:54

Respuesta: problema al convertir string en date
 
Me suena.

Yo también tuve ese problema, te cuento como lo he solucionado ;)

Código:

    /**
    * Convierte la fecha java a un string para insertarlo en la tabla mysql
    * @param fecha Fecha en java
    * @return String convertido.
    */
    private String fecha_sql (GregorianCalendar fecha){
        String fechasql = fecha.get(Calendar.YEAR) + "-" + fecha.get(Calendar.MONTH) + "-" + fecha.get(Calendar.DAY_OF_MONTH);
        return fechasql;
    }

Si usas el calendar en la aplicación podrás mostrar el calendario (que te evita tener que validar la fecha) y con esta simple funcion tienes la fecha como a mysql le gusta.

Espero que te sirva ;)

Un saludo

GreenEyed 08/06/2008 17:07

Respuesta: problema al convertir string en date
 
Si lo vas a insertar en la BDD como fecha, no necesitas convertirlo a String, lo que necesitas es pasarle el parametro como una fecha. Usando un PreparedStatement, por ejemplo. Asi te ahorras problemas de formatos etc. y ya se encarga el driver JDBC de todo.

Igualmente, para formatear una fecha de vuelta a String, si empezaste con un String no le veo el sentido pero bueno..., lo mas flexible es usar SimpleDateFormat.

S!

djagu_26 08/06/2008 17:27

Respuesta: problema al convertir string en date
 
para poder insertarlo en la bd en mysql le tienes q pasar en la sql uno q sea de tipo java.sql.Date porq si le pasas un java.util.Date no te funciona
saludos

aniMAYtions 10/06/2008 13:41

Respuesta: problema al convertir string en date
 
Muchas gracias chic@s, al final lo he solucionado de otra forma. Por recomendación de mis profesores he cambiado la base de datos a sql server y trabajo desde ahí mejor.
Cuando tenga tiempo probaré lo que me habeis dicho con mysql. Gracias!!

sanmi69 11/06/2008 02:07

Respuesta: problema al convertir string en date
 
Cita:

Iniciado por Isdiar (Mensaje 2438093)
Te recomiendo que te crees una clase Fecha y crees los métodos ahí.
Creo que esto te serviría (ya le añades tú los métodos restantes que te interesen):






Dime qué te parece esta solución, si te viene bien o no... Salu2!

eso es reinventar la rueda.....

sanmi69 11/06/2008 02:08

Respuesta: problema al convertir string en date
 
Cita:

Iniciado por aniMAYtions (Mensaje 2439525)
GreenEyed, perdona si no me he explicado bien...
A ver, io recibo la fecha como una cadena desde un textfield y la cosa es que me gustaría convertirla a un tipo de dato fecha en formato 'yyyy-mm-dd' para luego poder insertarla en una base de datos y trabajar desde ahí con fechas, entonces el formato texto que me devuelve no es lo que busco sino, si en el textfield pongo 2008-06-05 quiero que al convertirlo a Date me devuelva lo mismo, 2008-06-05.
Gracias!!

para usar fechas en base de datos usa campos de tipo fecha. Usar campos string en la base de datos para las fechas es una warrada, y no es util, porq no puedes operar con ellas.


La zona horaria es GMT -6. Ahora son las 19:56.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.