Foro de elhacker.net

Programación => Java => Mensaje iniciado por: soy_nicanor en 10 Abril 2017, 22:04 pm



Título: imprimir fechas
Publicado por: soy_nicanor en 10 Abril 2017, 22:04 pm
un ejemplo:
imprimir desde 2017-01-10 hasta 2017-04-30
como resultado debe imprimir:
2017-1-10
2017-1-11
..
..
2017-1-29
2017-1-30
2017-1-31
2017-2-1
2017-2-2
..
..
2017-2-27
2017-2-28
2017-3-1
2017-3-2
..
..
2017-3-30
2017-3-31
2017-4-1
2017-4-2
..
..
2017-4-29
2017-4-30

Gracias por la ayuda


Título: Re: imprimir fechas
Publicado por: Orubatosu en 10 Abril 2017, 22:53 pm
¿Clase Calendar?

¿O tienes que hacerlo "artesanalmente"?


Título: Re: imprimir fechas
Publicado por: soy_nicanor en 10 Abril 2017, 23:01 pm
Código
  1.        int anoI=2017, mesI=1, diaI=10;
  2.        int anoF=2017, mesF=04, diaF=31;
  3.        int a, m, d;
  4.        for(a=anoI;a<=anoF;a++){
  5.            for(m=mesI;m<=mesF;m++){
  6.                for(d=diaI;d<=diaF;d++){
  7.                    System.out.println(a+"-"+m+"-"+d);
  8.                }
  9.                diaI=1;
  10.            }
  11.           mesI = 1;
  12.        }
  13.  

Esto no me funciona en 2016-12-20 a 2017-02-10


Título: Re: imprimir fechas
Publicado por: Orubatosu en 11 Abril 2017, 09:50 am
Dado que lo quieres hacer "artesanal" deberás de controlar los dias y los meses

Los meses no tienen misterio, sabes que son 12 y no puedes hacer ciclos de mas de 12 meses. Los días del mes podrías definir un array de 12 elementos con los días de cada mes

Por ejemplo: 31, 28, 31, 30, etc.... y comprobar a la hora de añadir días que no se supera en correspondiente a ese elemento.

Rizando el rizo y siendo puntilloso, deberías de hacer comprobaciones sobre los años bisiestos y todo eso.

Pero la clase Calendar te permite hacer eso directamente, debo de suponer que lo que quieres es hacerlo manualmente

Tu sistema con bucles no puede funcionar si el segmento de días que quieres imprimir tiene un final y principio de mes en medio.

Yo lo plantearía de otro modo. Haría un bucle while (uno solo) e iría incrementando el día comprobando que la fecha es correcta. Comprobaría que el día no supera 28, 30 o 31 en función del mes, y si lo hace lo pondría a 1 e incrementaría el mes, cuidando que que el mes no fuera mayor que 12, y si lo es lo pondría a uno incementando entonces el año.

Así hasta que la fecha alcanzara la fecha destino que queremos, momento en el que cambiaría una variable booleana de control para el while y saldría del mismo.