Autor Tema: Java cómo calcular los días de diferencia entre dos fechas (rango / cantidad)  (Leído 3012 veces)

CoduJ

  • Sin experiencia
  • *
  • Mensajes: 28
    • Ver Perfil
Buenas, espero que se encuentren bien.

Como lo dice en el asunto, necesito un poco de orientación en cuanto a un código que me ha costado bastante ver como funciona e igualmente a programarlo:

Código: [Seleccionar]
if (Year_2 > Year || Year > Year_2){
    DateMinus = (Day - Day_2) - ((Month - Month_2) + 30) - (((Year - Year_2) * 365));
    if (DateMinus < 0){
        DateMinus *= -1;
    }
}else if (Year == Year_2){
    DateMinus = (Day - Day_2) - ((Month - Month_2) * 30);
}

Algo raro que he notado es que aveces se pasa de la fecha por unos días (16, por ejemplo) o algunas veces faltan, por lo que he visto, suele pasar cuando son fechas grandes en  momentos donde faltan días, y no he notado un "patrón" claro en el caso de que se pasen días.

Una cosa es que este es un ejercicio de programación que estoy siguiendo, y el anunciado aclara que se debe de suponer que todos los meses tienen 30 días, soy consiente de eso, pero no creo que esa sea la razón del porqué falten 15 días o incluso se pase por casi 34 días. Lamentablemente, me vi forzado a ver la respuesta del ejercicio, ya que no comprendía que pasaba, y según la fórmula, es esta:

Código: [Seleccionar]
total_dias = dia2-dia1 + 30*(mes2-mes1)+365*(año2-año1);
Por la gran decepción al ver la respuesta, y no verme capaz de hacerlo por mi parte, quise "crear" una nueva fórmula con base en lo que vi.
« Última modificación: 25 de Octubre 2020, 21:03 por Alex Rodríguez »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re:Diferencia entre fechas
« Respuesta #1 en: 02 de Mayo 2020, 17:50 »
¿Aquí querías poner meses + 30, o más bien sería meses * 30?

Citar
if (Year_2 > Year || Year > Year_2){
    DateMinus = (Day - Day_2) - ((Month - Month_2) + 30) - (((Year - Year_2) * 365));
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

CoduJ

  • Sin experiencia
  • *
  • Mensajes: 28
    • Ver Perfil
Re:Diferencia entre fechas
« Respuesta #2 en: 03 de Mayo 2020, 05:58 »
¿Aquí querías poner meses + 30, o más bien sería meses * 30?

Citar
if (Year_2 > Year || Year > Year_2){
    DateMinus = (Day - Day_2) - ((Month - Month_2) + 30) - (((Year - Year_2) * 365));
Vale, resulta que soy retrasado y se me olvido probar con eso, sin embargo, aun así se me adelantan días, como 2 o 3, ¿se debe por la regla de los 30 días? Ya que estoy comparando mis resultados con una calculadora de fechas.

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re:Diferencia entre fechas
« Respuesta #3 en: 03 de Mayo 2020, 18:14 »
Seguramente.
Si se consideran que todos los meses duran 30 días, lo cuál es falso, es imposible que de resultados acordes con la realidad.

Esa regla de los 30 días es para simplificar, pues si se quisiera ser exquisito en los cálculos, la cosa se complicaría mucho: meses de 30 días, otros de 31, está Febrero que es de 28.. menos en años bisiestos que entonces es 29...

Al final se desvirtúa la intención del ejercicio, que es enseñar a programar, no a ser astrólogo xDD

Un saludo.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".