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

[SOLUCIONADO] como obtener fechas entre un intervalo dado

Estas en el tema de como obtener fechas entre un intervalo dado en el foro de Java en Foros del Web. hola compañeros publique esto en otro foro asi que aqui lo coloco ya que quiero una segunda opinion ademas de sus apreciables sugerencias de como ...
  #1 (permalink)  
Antiguo 13/03/2014, 22:48
 
Fecha de Ingreso: enero-2014
Mensajes: 100
Antigüedad: 10 años, 2 meses
Puntos: 0
Información como obtener fechas entre un intervalo dado

hola compañeros publique esto en otro foro asi que aqui lo coloco ya que quiero una segunda opinion ademas de sus apreciables sugerencias de como se prodria realizar esto. les presento la idea que tube:


saludos amigos, tengo la siguiente pregunta:estoy haciendo un programa en el cual yo ingreso 2 fechas (fecha de inicio y fecha de termino) y lo que yo quiero hacer es obtener todas las fechas entre ese intervalo dado. el formato en el cual yo ingreso las fechas es el siguiente: yyyy-MM-dd. las fechas las ingresdo como texto y las parseo a date asi:

Código Java:
Ver original
  1. String f_inicio="2014-02-12";
  2. Date f_intervalo = null;
  3.  
  4. SimpleDateFormat formato_fecha = new
  5. f_intervalo=formato_fecha.parse(f_inicio)

hasta aqui ya converti la fecha de string a date ahora lo que a mi se me ocurre para poder obtener las fechas entre el intervalo es ir sumandole un dia y luego checar si la fecha resultante es igual a la fecha de termino por ejemplo no se si se pueda hacer o exista una funcion asi:

Código Java:
Ver original
  1. //aqui omiti algunos codigos como es la convercion de la fecha //obtenida al sumarle un dia para poder ser concatenada en la //variable fechasIntervalo
  2. boolean llave=true;
  3. String fechasIntervalo="";
  4.  
  5. while(llave){
  6.    f_intervalo=f_intervalo.addDays(1);
  7.       fechasIntervalo=fechasIntervalo+f_intervalo;  
  8.    if(f_intervalo==f_termino){
  9.       llave=false;
  10.   }
  11. }

bueno, puede que no sea la forma correc ta o tenga algunos errores pero lo que a mi se me ocurrio es eso. que todas las fechas obtenidas sean convertidas a strin para ser concatenadas en una sola variable y ya con eso so puedo separarlas e ir guardandolas en una base de datos en postgres.

yo pienso que esta podria se una buena opcion o que podrian sugerirme ustedes. no se si exista por ejemplo en java una funcion especial en la cual ingresando como argumentos 2 fechas de este tipo te retorne en una variable string todas las fechas concatenadas que estan entre estas dos. o en el propio postgres no se si exista un procedimiento para esto, creo recordar que habia uno para horas, aun asi, no he encontrado dicha funcion en la base de datos.

¿ustedes que opinan?
__________________
"Benditos sean todos los libros, pues cuando abres uno, te sumerges en un mundo nuevo y completamente diferente"
  #2 (permalink)  
Antiguo 14/03/2014, 21:31
Avatar de farfamorA  
Fecha de Ingreso: noviembre-2010
Ubicación: Lima
Mensajes: 136
Antigüedad: 13 años, 5 meses
Puntos: 24
Respuesta: como obtener fechas entre un intervalo dado

Almacena las fechas en una lista, con eso evitas la concatenación.
Código Java:
Ver original
  1. public List<Date> getListaEntreFechas(Date fechaInicio, Date fechaFin) {
  2.     Calendar c1 = Calendar.getInstance();
  3.     c1.setTime(fechaInicio);
  4.     Calendar c2 = Calendar.getInstance();
  5.     c2.setTime(fechaFin);
  6.     List<Date> listaFechas = new ArrayList<Date>();
  7.     while (!c1.after(c2)) {
  8.         listaFechas.add(c1.getTime());
  9.         c1.add(Calendar.DAY_OF_MONTH, 1);
  10.     }
  11.     return listaFechas;
  12. }
Y luego la recorres fácilmente:
Código Java:
Ver original
  1. for (Iterator<Date> it = listaEntreFechas.iterator(); it.hasNext();) {
  2.     Date date = it.next();
  3.     // Lógica de negocio
  4. }
  #3 (permalink)  
Antiguo 18/03/2014, 07:59
 
Fecha de Ingreso: enero-2014
Mensajes: 100
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: como obtener fechas entre un intervalo dado

ya veo, creo que podria ser una buena opcion ya que mi idea del intervalo esd que al sumarle un dia a la fecha esta la convierta en string para separar el dia de la semana y la fecha como tal es decir, por ejemplo: "LN 2014-03-18" separar esta fecha en dos cadenas utilizando como separador el espacio en blanco " " entr el nombre del dia y la fecha jejejje. aun asi lo intentare a ver que sale, muchas gracias por la sugerencia.
__________________
"Benditos sean todos los libros, pues cuando abres uno, te sumerges en un mundo nuevo y completamente diferente"
  #4 (permalink)  
Antiguo 18/03/2014, 08:39
Avatar de farfamorA  
Fecha de Ingreso: noviembre-2010
Ubicación: Lima
Mensajes: 136
Antigüedad: 13 años, 5 meses
Puntos: 24
Respuesta: como obtener fechas entre un intervalo dado

No necesitas que sea un String para separar así la fecha. Puedes usar la clase SimpleDateFormat para dar formato a las fechas. Prueba este ejemplo:
Código Java:
Ver original
  1. public class Ejemplo {
  2.  
  3.     public static void main(String args[]) {
  4.         // Instanciamos la clase Ejemplo
  5.         Ejemplo ejm = new Ejemplo();
  6.        
  7.         // Creamos las fechas utilizando la clase Calendar (recomendado)
  8.         Calendar c1 = Calendar.getInstance();
  9.         c1.set(2014, 02, 01); // Recuerda, en Java los meses empiezan desde 0
  10.                               // por lo tanto el mes 02 equivale a Marzo.
  11.         Calendar c2 = Calendar.getInstance();
  12.         c2.set(2014, 02, 18);
  13.        
  14.         // Obtenemos la lista de fechas utilizando el método que está líneas más abajo
  15.         java.util.List<Date> listaEntreFechas = ejm.getListaEntreFechas(c1.getTime(), c2.getTime());
  16.        
  17.         // Creamos el SimpleDateFormat con nuestro patrón deseado E yyyy-MM-dd
  18.         SimpleDateFormat sdf = new SimpleDateFormat("E yyyy-MM-dd");
  19.        
  20.         // Recorremos la lista
  21.         for (Date date : listaEntreFechas) {
  22.             // Imprimimos en consola la fecha formateada
  23.             System.out.println(sdf.format(date));
  24.         }
  25.     }
  26.    
  27.     /**
  28.      * Método para obtener una lista con fechas en el intervalo indicado
  29.      * @param fechaInicio Fecha inicial del intervalo
  30.      * @param fechaFin Fecha final del intervalo
  31.      * @return Fecha final
  32.      */
  33.     public java.util.List<Date> getListaEntreFechas(Date fechaInicio, Date fechaFin) {
  34.         // Convertimos la fecha a Calendar, mucho más cómodo para realizar
  35.         // operaciones a las fechas
  36.         Calendar c1 = Calendar.getInstance();
  37.         c1.setTime(fechaInicio);
  38.         Calendar c2 = Calendar.getInstance();
  39.         c2.setTime(fechaFin);
  40.        
  41.         // Lista donde se irán almacenando las fechas
  42.         java.util.List<Date> listaFechas = new java.util.ArrayList<Date>();
  43.        
  44.         // Bucle para recorrer el intervalo, en cada paso se le suma un día.
  45.         while (!c1.after(c2)) {
  46.             listaFechas.add(c1.getTime());
  47.             c1.add(Calendar.DAY_OF_MONTH, 1);
  48.         }
  49.         return listaFechas;
  50.     }
  51.  
  52. }
Verás que la salida es justo lo que deseas:
Código:
sáb 2014-03-01
dom 2014-03-02
lun 2014-03-03
mar 2014-03-04
mié 2014-03-05
jue 2014-03-06
vie 2014-03-07
sáb 2014-03-08
dom 2014-03-09
lun 2014-03-10
mar 2014-03-11
mié 2014-03-12
jue 2014-03-13
vie 2014-03-14
sáb 2014-03-15
dom 2014-03-16
lun 2014-03-17
mar 2014-03-18
Y así evitas nuevamente la concatenación de Strings.

Te recomiendo este enlace:
http://chuwiki.chuidiang.org/index.p...mpleDateFormat
En la documentación oficial puedes ver las letras patrones (d, y, M, E) que se utilizan en Java para formatear fechas:
http://docs.oracle.com/javase/6/docs...ateFormat.html

Saludos.
  #5 (permalink)  
Antiguo 18/03/2014, 21:40
 
Fecha de Ingreso: enero-2014
Mensajes: 100
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: como obtener fechas entre un intervalo dado

ya veo, jajajajaja, esto es demaciado avanzado para mi jejeje, aun asi tratare de leerlo y entenderlo para poder implementarlo. muchas gracias por tu ayuda jejeje.
__________________
"Benditos sean todos los libros, pues cuando abres uno, te sumerges en un mundo nuevo y completamente diferente"

Etiquetas: dado, intervalo, programa, string
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 09:26.