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

Problema con fechas

Estas en el tema de Problema con fechas en el foro de Java en Foros del Web. Hola!! Soy nueva por aquí, y tengo una duda sobre el manejo de fechas en Java. Bueno, solo decirlos que me he pasado toda la ...
  #1 (permalink)  
Antiguo 03/06/2012, 14:12
 
Fecha de Ingreso: noviembre-2008
Mensajes: 13
Antigüedad: 15 años, 5 meses
Puntos: 1
Pregunta Problema con fechas

Hola!!

Soy nueva por aquí, y tengo una duda sobre el manejo de fechas en Java. Bueno, solo decirlos que me he pasado toda la tarde intentando buscar la solución a mi problema y no me ha funcionado nada.

Os cuento:

Tengo una clase, llamada PrestamoLibro, donde un Calendar que me saca la fecha actual que tiene el equipo, es decir, el código sería el siguiente (es global):

Código:
       public static Calendar c2prestamoL = Calendar.getInstance();
       
       public static int dia = (c2prestamoL.get(Calendar.DATE));
       public static int mes = (c2prestamoL.get(Calendar.MONTH));
       public static int annio = (c2prestamoL.get(Calendar.YEAR));
       public static long milis = c2prestamoL.getTimeInMillis();
(Public Static porque necesito esas atributos en otra clase).

Y luego, tengo otra clase, llamada PanelDevolucion, donde también saco la fecha actual del sistema y luego a través de un action performed de un botón quiero saber la diferencia de días que han transcurrido. Es decir, el código sería el siguiente:

Código:
      Calendar c2prestamo = Calendar.getInstance();

       int diaD = c2prestamo.get(Calendar.DATE);
       int mesD = c2prestamo.get(Calendar.MONTH);
       int annioD = c2prestamo.get(Calendar.YEAR);
       long milisD = c2prestamo.getTimeInMillis();
(También le tengo puesto como global).

Action Performed de un botón:

Cita:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

// calcular la diferencia en milisengundos
long diff = PrestamoLibro.milis - milisD;

// calcular la diferencia en dias
long diffDays = diff / (24 * 60 * 60 * 1000);


JOptionPane.showMessageDialog(this, "Diferencia en días: "+diffDays,"OK", JOptionPane.INFORMATION_MESSAGE);

}
Pero cuando le doy de alta a un usuario y a una publicación (el programa es sobre la gestión de una biblioteca) y después hago préstamo de una publicación, luego cambio la fecha del sistema, y voy a devolver la publicación... la diferencia de días siempre me da 0.

He probado con otro código que encontré por internet, que si hace falta os lo muestro, pero tampoco funcionó, y no se porque me da un error de 0 días.

He pensado que quizás el problema está en los atributos de la clase PrestamoLibro, que los coge mal en la otra clase.

A ver si me podéis echar una mano...

Muchas gracias,

Un saludo.
  #2 (permalink)  
Antiguo 03/06/2012, 16:33
Avatar de caruizj  
Fecha de Ingreso: marzo-2012
Ubicación: Málaga
Mensajes: 161
Antigüedad: 12 años, 2 meses
Puntos: 14
Respuesta: Problema con fechas

Puede ser que la segunda fecha no tenga el mismo formato, mira a ver cómo viene (a lo mejor esta con un formato yyyy/MM/dd y el otro dd/MM/yyyy, por ejemplo).

Hace poco que puse una entrada en mi blog que explicaba como calcular la diferencia entre dos fechas, espero que te funcione:

http://miscodigosdejava.blogspot.com...-2-fechas.html

Un saludo
__________________
Aprendiendo un poco de Java :D
  #3 (permalink)  
Antiguo 03/06/2012, 16:38
 
Fecha de Ingreso: noviembre-2008
Mensajes: 13
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Problema con fechas

Muchas gracias, caruizj por tu respuesta !!

Hoy ya es tarde y tengo la cabeza saturada, jeje. Mañana por la mañana miro tu código con calma e intendo modificar el mío.

Te aviso con lo que sea.

Gracias,

Un saludo!
  #4 (permalink)  
Antiguo 03/06/2012, 16:43
 
Fecha de Ingreso: noviembre-2008
Mensajes: 13
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Problema con fechas

Oye, perdona, así a primera vista del código, veo que sólo es si la fecha está en formado String. Si la quiero pasar, debo convertir mi fecha a String, es decir, algo así, verdad?

Código PHP:
      Calendar c2prestamo Calendar.getInstance();

       
String diaD Integer.valueOfc2prestamo.get(Calendar.DATE));
       
String mesD Integer.valueOf(c2prestamo.get(Calendar.MONTH));
       
String annioD Integer.valueOf(c2prestamo.get(Calendar.YEAR));
       
long milisD Integer.valueOf(c2prestamo.getTimeInMillis()); 
  #5 (permalink)  
Antiguo 04/06/2012, 02:03
Avatar de caruizj  
Fecha de Ingreso: marzo-2012
Ubicación: Málaga
Mensajes: 161
Antigüedad: 12 años, 2 meses
Puntos: 14
Respuesta: Problema con fechas

Cita:
Iniciado por Vera_ Ver Mensaje
Oye, perdona, así a primera vista del código, veo que sólo es si la fecha está en formado String. Si la quiero pasar, debo convertir mi fecha a String, es decir, algo así, verdad?

Código PHP:
      Calendar c2prestamo Calendar.getInstance();

       
String diaD Integer.valueOfc2prestamo.get(Calendar.DATE));
       
String mesD Integer.valueOf(c2prestamo.get(Calendar.MONTH));
       
String annioD Integer.valueOf(c2prestamo.get(Calendar.YEAR));
       
long milisD Integer.valueOf(c2prestamo.getTimeInMillis()); 
Si lo tienes en dias, mes, año, lo pasas a string y luego lo concatenas, como lo has puesto ;)

Te ha funcionado?
__________________
Aprendiendo un poco de Java :D
  #6 (permalink)  
Antiguo 04/06/2012, 03:30
 
Fecha de Ingreso: noviembre-2008
Mensajes: 13
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Problema con fechas

Hola de nuevo!!

Ya probé tu código, que por cierto, me ha gustado , pero el problema es que siempre me da error en el parseo y no se porqué.

He pasado las dos fechas a String:

Código PHP:
public static String fechaP = (String.valueOf(annio-mes-dia)); 
Código PHP:
String fechaD = (String.valueOf(annioD-mesD-diaD)); 

Y he cambiado el formato de Simple date format, porque la fecha y el mes me lo muestra sólo con un número:

Código:
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-M-d");
Llamada a la función:

Código PHP:
DiferenciaFechas(fechaD,PrestamoLibro.fechaP ); 
Y siempre me da error de parseo. Qué puede ser?

De todas formas acabo de arreglarlo con el código que postee al presguntar!!!!
Lo que pasaba es que las dos clases tenían atributos que eran una variable, y al cambiar la fecha del sistema, y al ser una variable también se modificaba en la clase préstamo, y por eso me daba una resta de 0 días. Siemplemente en la clase préstamo cambie los atributos de este modo:

Código PHP:
        public static final int dia = (c2prestamoL.get(Calendar.DATE));
        public static final 
int mes = (c2prestamoL.get(Calendar.MONTH));
        public static final 
int annio = (c2prestamoL.get(Calendar.YEAR));
        public static final 
long milis c2prestamoL.getTimeInMillis(); 
Es decir, añadiendo el "final" me aseguro de que no se cambien. Así funciona!

De todas formas me gustaría que me digas qué es lo que hago mal con tu código para arreglar el error del parser, ya que me gustaría tenerlo por si me sirve en un futuro.

Gracias!

Etiquetas: clase, programa
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 19:14.