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

Duda sobre fechas con calendario gregoriano

Estas en el tema de Duda sobre fechas con calendario gregoriano en el foro de Java en Foros del Web. Buenos días a todos. Mi problema es que tuve que "buscarme la vida" para hacer un ejercicio que, entre otras cosas, obliga a calcular el ...
  #1 (permalink)  
Antiguo 05/11/2012, 02:38
 
Fecha de Ingreso: noviembre-2012
Mensajes: 5
Antigüedad: 12 años, 1 mes
Puntos: 0
Duda sobre fechas con calendario gregoriano

Buenos días a todos. Mi problema es que tuve que "buscarme la vida" para hacer un ejercicio que, entre otras cosas, obliga a calcular el número de días entre dos fechas.

Sé que hay otros métodos y que se pueden hacer manualmente, pero encontré este y lo estudié. Consiste en que pasa cada fecha a milisegundos, teniendo en cuenta el calendario gregoriano que empieza el 1/1/1970 si no recuerdo mal, para una vez echa la resta de fechas, pasarlo a días.
El problema que tengo es que si la diferencia se hace en base al mismo mes no hay problema, pero al cambiar de mes no lo hace bien, ya que poniendo el último día de un mes y el primero del siguiente mes, me pone -1. A continuación copio el código de la clase para que le echéis un vistazo si queréis.

public class resta_fecha {
int di,mi,ai,df,mf,af;
long t;
public resta_fecha(int diai,int mesi,int anioi,int diaf,int mesf,int aniof){
di=diai;
mi=mesi;
ai=anioi;
df=diaf;
mf=mesf;
af=aniof;

//Creo las dos instancias de fecha
GregorianCalendar finicial = new GregorianCalendar(ai, mi, di);
GregorianCalendar ffinal = new GregorianCalendar(af, mf, df);

//Obtengo los objetos Date para cada una de ellas
Date fi = finicial.getTime();
Date ff = ffinal.getTime();

//Realizo la operación
long tiempo = ff.getTime() - fi.getTime(); //tiempo en milisegundos

//Muestro el resultado en días
//t=tiempo/(3600*24*1000);
t=tiempo/(1000*60*60*24);

NOTA: t es la variable donde guardo los días.

Espero alguna respuesta que me pueda ayudar. Muchas gracias.
  #2 (permalink)  
Antiguo 05/11/2012, 09:50
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 16 años, 3 meses
Puntos: 188
Respuesta: Duda sobre fechas con calendario gregoriano

Vale, ahora pon exactamente los datos que utilizaste para las pruebas.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #3 (permalink)  
Antiguo 05/11/2012, 10:19
 
Fecha de Ingreso: noviembre-2012
Mensajes: 5
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Duda sobre fechas con calendario gregoriano

No he entendido eso
  #4 (permalink)  
Antiguo 05/11/2012, 10:23
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 16 años, 3 meses
Puntos: 188
Respuesta: Duda sobre fechas con calendario gregoriano

Que si te equivocaste al poner la fecha inicial y final cuando cambiaste de meses es normal que te de -1.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #5 (permalink)  
Antiguo 05/11/2012, 15:54
 
Fecha de Ingreso: noviembre-2012
Mensajes: 5
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Duda sobre fechas con calendario gregoriano

Pues no se pero si en fecha inicial pongo 29/02/2012; y en fecha final pongo 01/02/2012, tendría que ser un día, ya que la resta es fecha_inicial - fecha_final.

Aunque me gustaría resolver ese problemilla, ahora mi problema es otro, y es que me ha pedido el profesor que haga este mismo ejercicio pero sin utilizar el calendario gregoriano ni nada parecido, si no que la resta la haga yo. Y me he perdido bastante la verdad.

Gracias.
  #6 (permalink)  
Antiguo 05/11/2012, 17:58
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 16 años, 3 meses
Puntos: 188
Respuesta: Duda sobre fechas con calendario gregoriano

Sin GregorianCalendar puedes usar la clase Date.

Para introducir la fecha utilizas un SimpleDateFormat con el formato de la fecha.

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

Luego parseas a Date: Date fechaFin = sdf.parse("01/03/2012");

Repites con la otra fecha.

luego utilizas el metodo getTime() de la clase Date para devolver el tiempo en milisegundos.

Restas long msfechafin - long msfechainicio

El resultado lo divides entre: 1000*3600*24 (milisegundos/segundo * segundos/hora * horas/dia) y ya tienes el numero de días calculado sin usar la clase GregorianCalendar.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}

Etiquetas: javabean, restarfechas
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 07:49.