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

Porq no funciona Mi calculador de cumpleaños

Estas en el tema de Porq no funciona Mi calculador de cumpleaños en el foro de Java en Foros del Web. Hola Realize mi codigo para calcular la fecha de cumpleaños de una persona ingresando en un formulario La fecha de naciemiento y la fecha actual ...
  #1 (permalink)  
Antiguo 29/03/2011, 11:51
 
Fecha de Ingreso: marzo-2009
Mensajes: 90
Antigüedad: 15 años, 8 meses
Puntos: 0
Porq no funciona Mi calculador de cumpleaños

Hola Realize mi codigo para calcular la fecha de cumpleaños de una persona ingresando en un formulario La fecha de naciemiento y la fecha actual es decir

SI alguien nacio el 30/03/1986 y hoy es 29/03/2011 el programa me debe decir Falta 1 dia para el cumpleaños es todo aqui les dejho lo q hize pero no me funciona. asi como lo tengo e ingresando las fechas anteriores el resultado q me da es este 9130 PORQ??? q pasa

public class Calcular_cumple {

public Date aDate(String fechainicial){
SimpleDateFormat formatoDelTexto = new SimpleDateFormat("dd/MM/yyyy");
Date fecha = null;

try {
fecha = formatoDelTexto.parse(fechainicial);
} catch (java.text.ParseException ex) {
ex.printStackTrace();
}
return fecha;


}


public int diferenciafechas (Date fechanto, Date fechactual){

DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM);
String fechaInicioString = df.format(fechanto);
try {
fechanto = df.parse(fechaInicioString);
}
catch (ParseException ex) {
}

String fechaFinalString = df.format(fechactual);
try {
fechactual = df.parse(fechaFinalString);
}
catch (ParseException ex) {
}

long fechaInicialMs = fechanto.getTime();
long fechaFinalMs = fechactual.getTime();
long diferencia = fechaFinalMs - fechaInicialMs;
double dias = Math.floor(diferencia / (1000*3600*24));
return ( (int) dias);

}
}
  #2 (permalink)  
Antiguo 29/03/2011, 12:35
Avatar de sivadmp  
Fecha de Ingreso: febrero-2011
Ubicación: La Paz - Bolivia
Mensajes: 293
Antigüedad: 13 años, 9 meses
Puntos: 20
Respuesta: Porq no funciona Mi calculador de cumpleaños

hola kosios

porque no utilizas formateo de fechas, es decir la resta de las dos fechas que tienes lo colocas dentro de un nuevo Date, y a este nuevo date lo formateas

Código java:
Ver original
  1. long fi = fechanto.getTime();
  2. long ff= fechactual.getTime();
  3. long dif= ff- fi;
  4. Date date=new Date(dif);
  5.  
  6.  
  7. System.out.println("DIA "+df.format(date));

espero haberte ayudado saludos
__________________
agradecer no cuesta nada
Entre más información proporciones más fácil será ayudarte, y asi evitar adivinar el problema con el que cuentas.
  #3 (permalink)  
Antiguo 29/03/2011, 14:00
 
Fecha de Ingreso: febrero-2011
Mensajes: 10
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: Porq no funciona Mi calculador de cumpleaños

Mira este [URL="http://www.forosdelweb.com/f45/aporte-programa-con-codigo-fuente-documentacion-898886/"]post[/URL].

Es un programa parecido(que hasta tiene ventana y es ejecutable) que uno introduce una fecha y te dicen cuantos días faltan para esa fecha, tiene código fuente y documentación porlo que no creo que sea muy difícil de cambiarlo.
  #4 (permalink)  
Antiguo 29/03/2011, 14:47
 
Fecha de Ingreso: marzo-2009
Mensajes: 90
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Porq no funciona Mi calculador de cumpleaños

Cita:
Iniciado por sivadmp Ver Mensaje
hola kosios

porque no utilizas formateo de fechas, es decir la resta de las dos fechas que tienes lo colocas dentro de un nuevo Date, y a este nuevo date lo formateas

Código java:
Ver original
  1. long fi = fechanto.getTime();
  2. long ff= fechactual.getTime();
  3. long dif= ff- fi;
  4. Date date=new Date(dif);
  5.  
  6.  
  7. System.out.println("DIA "+df.format(date));

espero haberte ayudado saludos
Gracias por responder pero no entiendo como mostrar esto, Yo tengo una funcion return me tiene q devolver un valor INT o entero...trabajo Programacion orientada oBjetos y de esa funcion llega a otro pagqueda q contiene la Instacia.. bueno de todas formas gracias.
  #5 (permalink)  
Antiguo 29/03/2011, 15:25
 
Fecha de Ingreso: marzo-2009
Mensajes: 90
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Porq no funciona Mi calculador de cumpleaños

Hola hize esto con lo q me dijsite pero me da un resultado extraño Si pongo la fecha de nacimiento 30/03/1987 y la fecha de hoy 29/03/2011 me sale un 30 es decir me tendria q decir q SOlo falta un dia para mi cumpleaños.

long fechaInicialMs = fechanto.getTime();
long fechaFinalMs = fechactual.getTime();
long diferencia = fechaFinalMs - fechaInicialMs;
//double diass = Math.floor(diferencia / (1000 * 3600 * 24));
Date date=new Date(diferencia);

DateFormat dfc=new SimpleDateFormat("dd");
String dias=dfc.format(date);

return ( Integer.parseInt(dias));
  #6 (permalink)  
Antiguo 29/03/2011, 16:39
Avatar de sivadmp  
Fecha de Ingreso: febrero-2011
Ubicación: La Paz - Bolivia
Mensajes: 293
Antigüedad: 13 años, 9 meses
Puntos: 20
Respuesta: Porq no funciona Mi calculador de cumpleaños

sabes cual es el problema los años,
la respuesta 9130 que te sale de restar 30/03/1986 y 29/03/2011 es por que toma en cuanta la catida de dias que hay entre esas dos fechas

lo que tendrias que hacer es omitir los años y resta solo dias y meses

Código java:
Ver original
  1. DateFormat df_ini=new SimpleDateFormat("dd/MM");
  2.         Date date_ini;
  3.         Date date_fin;
  4.         try {
  5.             date_ini = df_ini.parse("20/01/1986");
  6.             date_fin=df_ini.parse("29/04/2011");
  7.            
  8.             long fi = date_ini.getTime();
  9.             long ff = date_fin.getTime();
  10.             long dif= ff- fi;
  11.            
  12.             double dias = Math.floor(dif / (1000 * 3600 * 24));
  13.            
  14.             System.out.println("DIAS "+dias);
  15.            
  16.             Date date=new Date(dif);
  17.             DateFormat df_dia=new SimpleDateFormat("dd");
  18.             DateFormat df_mes=new SimpleDateFormat("MM");
  19.             int mes=Integer.parseInt(df_mes.format(date))-1;
  20.              
  21.             System.out.println(df_dia.format(date)+" DIAS y "+mes+" MESES para tu cumpleaño");
  22.            
  23.         } catch (ParseException e) {
  24.             e.printStackTrace();
  25.         }
__________________
agradecer no cuesta nada
Entre más información proporciones más fácil será ayudarte, y asi evitar adivinar el problema con el que cuentas.
  #7 (permalink)  
Antiguo 30/03/2011, 21:21
 
Fecha de Ingreso: marzo-2009
Mensajes: 90
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Porq no funciona Mi calculador de cumpleaños

OK lo probare y te dire q tal me fue, Espero me responda y estemos en conctacto mandame un privado y te mando mi Email para conectarnos.
  #8 (permalink)  
Antiguo 31/03/2011, 14:05
 
Fecha de Ingreso: marzo-2009
Mensajes: 90
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Porq no funciona Mi calculador de cumpleaños

HOla AUn no funciona mira coloco las fecha de nacimeintos 01/04/1986 y coloco fecha actual 31/03/2011 Y como resulto Abtengo 30 dias y 11 meses para tu cumpleaños........... cuando mando lo datos estos Llegan comoe strin a dos variables luego esas dos variables q son fechanto y fechactual las envio por medio de una instalacion hacia La funcion diferenciafechas y luego esta me retorna un valor y la mando hacia el formulario JSP de nuevo.

Aqui la INstancia q es un packete java TAghandler.

public class Inst_cumple extends SimpleTagSupport {
private String fechanto;
private String fechactual;

public void doTag() throws JspException {
JspWriter out = getJspContext().getOut();

Calcular_cumple calcular= new Calcular_cumple();

try {
int resultado= calcular.diferenciafechas(fechanto, fechactual);

getJspContext().setAttribute("valor", String.valueOf(resultado));

} catch (Exception ex) {
throw new JspException("Error in Inst_cumple tag", ex);
}
}

Aca la funcion en una JAVA class

public int diferenciafechas (String fechanto, String fechactual){

DateFormat df_ini=new SimpleDateFormat("dd/MM");
Date date_ini;
Date date_fin;
String day=null;
try {
date_ini = df_ini.parse(fechanto);
date_fin=df_ini.parse(fechactual);

long fi = date_ini.getTime();
long ff = date_fin.getTime();
long dif= ff- fi;

double dias = Math.floor(dif / (1000 * 3600 * 24));

System.out.println("DIAS "+dias);

Date date=new Date(dif);
DateFormat df_dia=new SimpleDateFormat("dd");
DateFormat df_mes=new SimpleDateFormat("MM");
int mes=Integer.parseInt(df_mes.format(date))-1;
day= df_dia.format(date);
System.out.println(df_dia.format(date)+" DIAS y "+mes+" MESES para tu cumpleaño");

} catch (ParseException e) {
e.printStackTrace();
}
return (Integer.parseInt(day));

}

}


Y nada amigo tengo q retorna un valor no puedo retornar Los meses con los dias, pero me conformo con q me diga los dias q faltan. so se donde me he equivocado.
  #9 (permalink)  
Antiguo 04/04/2011, 12:14
Avatar de sivadmp  
Fecha de Ingreso: febrero-2011
Ubicación: La Paz - Bolivia
Mensajes: 293
Antigüedad: 13 años, 9 meses
Puntos: 20
Respuesta: Porq no funciona Mi calculador de cumpleaños

estas asiendo mal hermano

sabes donde esta el problema, en la resta de fechas, siempre tienes que restar la fecha mayor menos fecha menor

entonces tenemos las fechas fi = 01/04/1986 y ff= 31/03/2011

la fecha mayor es 31/03/2011 pero si le quitamos los años la fecha mayor seria

01/04 > 31/03

este codigo te va aservir

Código java:
Ver original
  1. public int diferenciafechas(String fechanto, String fechactual) {
  2.  
  3.         DateFormat df_ini = new SimpleDateFormat("dd/MM");
  4.         Date date_ini;
  5.         Date date_fin;
  6.         String day = null;
  7.         try {
  8.             date_ini = df_ini.parse(fechanto);
  9.             date_fin = df_ini.parse(fechactual);
  10.  
  11.             long fi = date_ini.getTime();
  12.             long ff = date_fin.getTime();
  13.             long dif = 0;
  14.             int mes=-1;
  15.            
  16.             DateFormat df_dia = new SimpleDateFormat("dd");
  17.             DateFormat df_mes = new SimpleDateFormat("MM");
  18.            
  19.             Date date = null;
  20.             if(ff > fi){
  21.                 dif = ff - fi;
  22.                 date = new Date(dif);
  23.                 mes = Integer.parseInt(df_mes.format(date)) - 1;
  24.             }
  25.             else{
  26.                 dif = fi - ff;
  27.                 date = new Date(dif);
  28.                 mes = Integer.parseInt(df_mes.format(date));
  29.             }
  30.            
  31.             day = df_dia.format(date);
  32.            
  33.            
  34.             System.out.println("Faltan "+df_dia.format(date) + " DIAS y " + mes + " MESES para tu cumpleaño");
  35.  
  36.         } catch (ParseException e) {
  37.             e.printStackTrace();
  38.         }
  39.         return (Integer.parseInt(day));
  40.  
  41.     }

yo creo que con esto se cierra el tema, o que dices

:) espero haberte ayudado saludos
__________________
agradecer no cuesta nada
Entre más información proporciones más fácil será ayudarte, y asi evitar adivinar el problema con el que cuentas.
  #10 (permalink)  
Antiguo 05/04/2011, 10:06
 
Fecha de Ingreso: marzo-2009
Mensajes: 90
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Porq no funciona Mi calculador de cumpleaños

hola amigo yo solucione el problema gracias a ti pero me funciono asi.. SOlo q me gustaria saber como puedo mostrar los DIAS y los meses...ya como sabes en una funcion el return solo devuelve un valor. como podria mandar el DIA y el mes.

public int diferenciafechas (String fechanto, String fechactual){

SimpleDateFormat df_ini=new SimpleDateFormat("dd/MM");
Date date_ini;
Date date_fin;

double dias = 0;
try {
date_ini = df_ini.parse(fechanto);
date_fin = df_ini.parse(fechactual);

long fi = date_ini.getTime();
long ff = date_fin.getTime();
long dif= ff- fi;
dias = Math.floor(dif / (1000 * 3600 * 24));

} catch (ParseException e) {
e.printStackTrace();
}
return ((int)dias)*(-1);

}

Aqui el me retorna Efectivamente los dias - ahora en ese return quisiera saber como logro meter Los DIas y los meses. para dar la respuesta q busco...EJE: te faltan 10 dias para tu cumple y 2 meses por decirlo asi.
  #11 (permalink)  
Antiguo 05/04/2011, 12:24
Avatar de sivadmp  
Fecha de Ingreso: febrero-2011
Ubicación: La Paz - Bolivia
Mensajes: 293
Antigüedad: 13 años, 9 meses
Puntos: 20
Respuesta: Porq no funciona Mi calculador de cumpleaños

bueno puedes utilizar un HashMap, donde le adiciones el codigo y valor

y este hash, es que vas a retornar

Código Java:
Ver original
  1. HashMap hash=new HashMap();
  2. hash.put("dia", dia_calc);
  3. hash.put("mes", mes_calc);
  4.  
  5. return hash;


Código Java:
Ver original
  1. HashMap dia_mes = diferenciafechas (fini, ffin);
  2.  
  3. System.out.println("Faltan "+dia_mes.get("dia")+" para tus cumpleños y "+dia_mes.get("mes") + " meses para tu cumpleaño");

saludos
__________________
agradecer no cuesta nada
Entre más información proporciones más fácil será ayudarte, y asi evitar adivinar el problema con el que cuentas.
  #12 (permalink)  
Antiguo 05/04/2011, 14:11
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: Porq no funciona Mi calculador de cumpleaños

Teniendo en cuenta que vas a devolver siempre dos valores numéricos, lo normal es que devuelvas un array de int de dos posiciones.

Ni necesitas identificadores, ni que sea de tamaño dinámico, utilizar un HashMap en este caso es un desperdicio y una mala práctica.

Tal y como lo ha puesto sivadmp, estarías reservando 16 posiciones de memoria de las que solo usas 2.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.

Etiquetas: cumpleaños, calculadora
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 10:31.