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

problema al convertir string en date

Estas en el tema de problema al convertir string en date en el foro de Java en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 05/06/2008, 18:07
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
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!!
  #2 (permalink)  
Antiguo 06/06/2008, 04:57
 
Fecha de Ingreso: septiembre-2004
Mensajes: 191
Antigüedad: 19 años, 7 meses
Puntos: 1
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???
  #3 (permalink)  
Antiguo 06/06/2008, 10:39
Isdiar
Invitado
 
Mensajes: n/a
Puntos:
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!
  #4 (permalink)  
Antiguo 07/06/2008, 14:23
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: problema al convertir string en date

Cita:
Iniciado por Isdiar Ver Mensaje
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!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #5 (permalink)  
Antiguo 07/06/2008, 14:44
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
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!!
  #6 (permalink)  
Antiguo 08/06/2008, 16:54
 
Fecha de Ingreso: junio-2008
Mensajes: 7
Antigüedad: 15 años, 10 meses
Puntos: 0
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
  #7 (permalink)  
Antiguo 08/06/2008, 17:07
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
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!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #8 (permalink)  
Antiguo 08/06/2008, 17:27
Avatar de djagu_26  
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 518
Antigüedad: 16 años, 3 meses
Puntos: 6
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
__________________
"La magia no existe, la programacion si"

A/P Agustin Sivoplas
[email protected]
  #9 (permalink)  
Antiguo 10/06/2008, 13:41
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
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!!
  #10 (permalink)  
Antiguo 11/06/2008, 02:07
 
Fecha de Ingreso: septiembre-2004
Mensajes: 191
Antigüedad: 19 años, 7 meses
Puntos: 1
Respuesta: problema al convertir string en date

Cita:
Iniciado por Isdiar Ver Mensaje
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.....
  #11 (permalink)  
Antiguo 11/06/2008, 02:08
 
Fecha de Ingreso: septiembre-2004
Mensajes: 191
Antigüedad: 19 años, 7 meses
Puntos: 1
Respuesta: problema al convertir string en date

Cita:
Iniciado por aniMAYtions Ver Mensaje
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.
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




La zona horaria es GMT -6. Ahora son las 22:14.