Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/10/2008, 06:02
xayide
 
Fecha de Ingreso: febrero-2006
Mensajes: 174
Antigüedad: 18 años, 2 meses
Puntos: 0
Para pensar, a no ser que alguien me de una solucion!

Hola a todos!

Disculpen por el título de la pregunta, pero esque no sabía cómo explicarlo.

Resulta que tengo dos fechas en modo string. Lo que quiero hacer es desglosar estas fechas por meses, por ejemplo:

me dan : 25-9-08 hasta 1-3-09

y quiero tener

25-9-08 -- 1-10-08
1-10-08 -- 1-11-08
1-11-08 -- 1-12-08
1-12-08 -- 1-1-09
1-1-09 -- 1-2-09
1-2-09 -- 1-3- 09

estoy haciendo a mano un algoritmo que lo haga, pero esq me estoy volviendo loca. Igual hay algun metodo mejor, pero esq con la clase Date y Calendar no se me ocurre cómo hacerlo.

Además, haciéndolo "a mano", hay tres casos posibles: (1) que el periodo esté dentro del mismo año (1-2-08 hasta 25-9-08), (2) que el periodo cambie de año pero dure menos de un año (1-11-08 hasta 20 -3-09) , (3) que el periodo cambie de año y además dure más de un año (1-2-08 hasta 5-6-09). Os pongo el algoritmo que he ido haciendo. Me da muchos fallos y espero que alguien me proponga una solución que no suponga este trabajo de chinos!!!!


Código:
	public static void main (String[] args){
		String fechaini="25/10/2008";
		String fechafin="25/12/2008";
		
		StringTokenizer st=new StringTokenizer(fechaini,"/");
		String diaini=st.nextToken(); int diai=Integer.parseInt(diaini);
		String mesini=st.nextToken();int mesi=Integer.parseInt(mesini);
		String anhoini=st.nextToken();int anhoi=Integer.parseInt(anhoini);
		
		StringTokenizer st2=new StringTokenizer(fechafin,"/");
		String diafin=st2.nextToken();int diaf=Integer.parseInt(diafin);
		String mesfin=st2.nextToken();int mesf=Integer.parseInt(mesfin);
		String anhofin=st2.nextToken();int anhof=Integer.parseInt(anhofin);
		
		
		//siguientes periodos
		int anho=anhoi;
		for(int j=anhoi; j<anhof;j++){ //por si se quiere un historial de más de un año
			
			if(mesi<mesf){ //periodo dentro del mismo año
				//primer periodo
				String p1=fechaini+"---"+"1/"+(mesi+1)+"/"+anhoini;				
				System.out.println("primerperiodo:"+p1);
				
				//siguientes periodos
				for(int i=mesi+1; i<mesf-1; i++ ){
					System.out.println("1");
					String pi;					
					pi="1/"+i+"/"+anhoi+"---"+"1/"+(i+1)+"/"+anhoini;					
					System.out.println("periodo"+i+":"+pi);
				}
				//ultimo periodo
				
				String pu="1/"+(mesf-1)+"/"+anho+"---"+fechafin;
				System.out.println("ultimo periodo pu:" +pu);
			}else if((mesi<mesf)&&(anhoi<anhof)){ //cambiamos de año y el periodo dura más de un año
					for(int a=anhoi;a<anhof;a++){
						 String p1=fechaini+"---"+"1/"+(mesi+1)+"/"+anhoini;					
						 System.out.println("primerperiodo:"+p1);
				
						for (int k=mesi+1;k<=12;k++){
							String pk="1/"+k+"/"+anho+"---"+"1/"+(k+1)+"/"+anho;	
							System.out.println("periodo pk:"+pk);
						}
				}
				
			
			}else{ //cambiamos de año y el periodo dura MENOS de un año
				
				//primer periodo
				String p1;
				if(mesi==12){
					 p1=fechaini+"---"+"1/"+(mesi+1)+"/"+(anhoini+1);
				}else{
					 p1=fechaini+"---"+"1/"+(mesi+1)+"/"+anhoini;
				}
				System.out.println("primerperiodo:"+p1);
				
				//siguientes periodos
				for (int k=mesi+1;k<12;k++){
					String pk="1/"+k+"/"+anho+"---"+"1/"+(k+1)+"/"+anho;	
					System.out.println("periodo pk:"+pk);
				}
				
				//ultimo periodo de ese año
				String pe="1/12/"+anho+"---"+"1/1/"+(anho+1);	
				System.out.println("periodo pk:"+pe);
				
				//cambiamos de año
				anho++;
				for(int f=1; f<mesf-1; f++){
					String pf="1/"+f+"/"+anho+"---"+"1/"+(f+1)+"/"+anho;
					System.out.println("periodo pf:"+pf);
				}
				
				//ultimo periodo
				
					String pu="1/"+(mesf-1)+"/"+anho+"---"+fechafin;
					System.out.println("ultimo periodo pu:" +pu);
									
			}
		}
			
		
	}
	
}
Muchísimas gracias si alguien lo intenta!!