style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

sumar días a una fecha sin usar librerias

Esto es solo un ejercicio practico en el que se pide obtener una fecha sin usar librerias de la manera dd-mm-aaaa, y una vez obtenida esta fecha sumar cierto número de días a esta fecha. Lo que intento resolver es la la suma de los dias.

primero según mi lógica necesitamos obtener el número de días por mes, para esto voy a crear una función diasPor Mes(String nombreMes)

public int diasPorMes(String nombreMes){
     int numDias=0;
    if(nombreMes.equals("abril")|| nombreMes("junio")||nombreMes.equals("septiembre")|| nombreMes("noviembre")){
        numDias=30;
    }else if(nombreMes.equals("febrero")){
       
       // para cuando el año es bisiesto
      if ((anio % 4 == 0) && ((anio % 100 != 0) || (anio % 400 == 0))){//si el año es bisiesto es divisible entre 4 y 100 o 400
           numDias=29;
        }
       
     else{
        numDias=28 ;//queda pendiente para año bisiesto
     }

   }else{//todos los demas meses
       numDias=31;
 
returm numDias;
}

ya tenemos el numero de días por mes, ahora lo que nos interesa es sumar para obtener la nueva fecha. se tiene que tomar en cuenta que si al número de dias a sumar excede el numero de dias restantes del mes, entonces se debe incrementar ciclicamente el mes, y lo mismo para el caso que sobrepase el numero de meses por año.

public void sumarDias(int numeroDiasSumar){
   int diaActual, mesActual, añoActual;// se supone que estas variables ya contienen valores, supongamos que la fecha es:
   diaActual=25;
   mesActual="diciembre";
   añoActual=2013;
   int numDias=diasPorMes("diciembre");// nos regresa 31represnat el numero de dias por mes
   //suponemos que nos mandaron que a la fecha anterior le sumemos 8 dias   por lo que nos deberia de quedar la fecha 02 de enero del 2014
if((diaActual+numeroDiasSumar)>numDias){
   //25+8=33
   //restamos el numero de dias total (33) menos  los dias que contiene el mes
  numDias=numDias-(diaActual+numeroDiasSumar); //nos queda 33-31=2
  //sumamos 1 al mes  y si excede 12 entonces sumamos uno al año y el mes siguiente es 1
  //para auxiliar lo siguiente creamos una funcion para que nos de el numero del mes segun el nombre del mes y nos lo regresa en numeroDeMes
numeroDeMes=numeroMes("diciembre");//regresa 12
  if((numeroDeMes+1)>=13){
      mesActual=numeroDeMes-mesActual+1;//en este caso 12 -12=0, pero como no hay mes cero y por logica le sumamos uno al mes
      añoActual=añoActual+1;//quedaria 2013+1=2014
     
}else if((numeroDeMes+1)<13){
             mesActual=mesActual+1;
          }
System.out.println("al sumar "+numeroDiasSumar+ " dias la fecha queda"+ diaActual+" de "+ mesActual +"  del "+ añoActual );
//al sumar 8 dias la fecha queda  2 de 1 del 2013

}
 

   
}

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de meztor

contienes varios errores

Esta entrada la hice para un compañero que empieza a aprender java y deje varios errores por lo mismo, no dar la solución completa si no solamente una ayuda

Imagen de 043h68

Gregorian Calendar

Creo que te convendría utilizar Gregorian Calendar para el manejo de fechas, por ejemplo ...

 public java.sql.Date fechaMas(java.sql.Date fch, int dias){
     Calendar cal = new GregorianCalendar();
     cal.setTimeInMillis(fch.getTime());
     cal.add(Calendar.DATE, dias);
     return new Date(cal.getTimeInMillis());
   }

   public java.sql.Date fechaMenos(java.sql.Date fch, int dias){
     Calendar cal = new GregorianCalendar();
     cal.setTimeInMillis(fch.getTime());
     cal.add(Calendar.DATE, - dias);
     return new Date(cal.getTimeInMillis());
   }  

Imagen de meztor

la idea es no usar librerias

Hola que tal tienes razón es mejor usar la clase gregorian calendar, pero para el ejercicio practico que nos dejaron fue hacer todas las operaciones sin usar ninguna libreria

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">