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

[SOLUCIONADO] Sumar un mes en java

Estas en el tema de Sumar un mes en java en el foro de Java en Foros del Web. Trabajo generando letras de pagos, con los dias de pagos desde 1 al 28 todo bien usando Código: SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy"); //Obtiene la ...
  #1 (permalink)  
Antiguo 09/04/2013, 17:57
Avatar de henrri  
Fecha de Ingreso: enero-2011
Mensajes: 40
Antigüedad: 13 años, 3 meses
Puntos: 3
Sumar un mes en java

Trabajo generando letras de pagos, con los dias de pagos desde 1 al 28 todo bien usando
Código:
SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
//Obtiene la fecha del sistema
Calendar c1 = Calendar.getInstance();
for (int i = 1; i <= 12; i++) {
      c1.add(Calendar.MONTH, 1);
      System.out.println("proxima letra sera: " + formato.format(c1.getTime()));
}
proxima letra sera: 09/05/2013
proxima letra sera: 09/06/2013
proxima letra sera: 09/07/2013
proxima letra sera: 09/08/2013
proxima letra sera: 09/09/2013
proxima letra sera: 09/10/2013
proxima letra sera: 09/11/2013
proxima letra sera: 09/12/2013
proxima letra sera: 09/01/2014
proxima letra sera: 09/02/2014
proxima letra sera: 09/03/2014
proxima letra sera: 09/04/2014


pero al generar por ejemplo desde el 31/01/2013

el resultado es
proxima letra sera: 28/02/2013
proxima letra sera: 28/03/2013
proxima letra sera: 28/04/2013
proxima letra sera: 28/05/2013
proxima letra sera: 28/06/2013
proxima letra sera: 28/07/2013
proxima letra sera: 28/08/2013
proxima letra sera: 28/09/2013
proxima letra sera: 28/10/2013
proxima letra sera: 28/11/2013
proxima letra sera: 28/12/2013
proxima letra sera: 28/01/2014

es decir en febrero toma el ultimo dia, pero al siguiente toma 28, lo que quisiera es que tome el ultimo de cada mes, algo similar a la funcion gomonth en fox... espero su ayuda gracias
__________________
consigue un trabajo que te guste y nunca mas volverás a trabajar...
  #2 (permalink)  
Antiguo 10/04/2013, 14:51
Avatar de henrri  
Fecha de Ingreso: enero-2011
Mensajes: 40
Antigüedad: 13 años, 3 meses
Puntos: 3
Respuesta: Sumar un mes en java

pude darle solución y pongo el código para que alguien los use algún día.
Código:
    // <editor-fold defaultstate="collapsed" desc="Haga clic en el signo + para mostrar descripción">
    /**
     * Genera las fechas de letras
     *
     * @param fechaInicio
     * @param numeroLetras
     * @return array con las fechas programdas para el pago
     */
    // </editor-fold>
    public List generarFechaLetrasMensuales(Date fechaInicio, int numeroLetras) {
        List fechaLetras = new ArrayList<Object>();
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");  //tipo de formato de salida
        Calendar c = Calendar.getInstance();
        c.set(fechaInicio.getYear() + 1900, fechaInicio.getMonth(), fechaInicio.getDate()); //seteamos la fecha de inicio
        if (fechaInicio.getDate() < 29) {   //si la fecha es menor a 29 retornamos el mismo mes siempre.
            fechaLetras.add(formato.format(c.getTime()));
            for (int i = 1; i < numeroLetras; i++) {
                c.add(Calendar.MONTH, 1);
                fechaLetras.add(formato.format(c.getTime()));
            }
            return fechaLetras;
        }
        if (fechaInicio.getDate() == 29) {  //para el caso de fecha 29 retornaremos los meses de febrero con fecha 28
            fechaLetras.add(formato.format(c.getTime()));
            for (int i = 1; i < numeroLetras; i++) {
                c.add(Calendar.MONTH, 1);
                if (c.getTime().getMonth() == 1) {
                    if (((c.getTime().getYear() + 1900) % 4 == 0) && (((c.getTime().getYear() + 1900) % 100 != 0) || ((c.getTime().getYear() + 1900) % 400 == 0))) {
                        fechaLetras.add("29/02/" + (c.getTime().getYear() + 1900));
                    } else {
                        fechaLetras.add("28/02/" + (c.getTime().getYear() + 1900));
                    }
                } else {
                    fechaLetras.add("29/" + (c.getTime().getMonth() < 9 ? ("0" + (c.getTime().getMonth() + 1)) : (c.getTime().getMonth() + 1)) + "/" + (c.getTime().getYear() + 1900));
                }
            }
        }
        if (fechaInicio.getDate() == 30) {  //retornareos el mes de febrero con fecha 28
            fechaLetras.add(formato.format(c.getTime()));
            for (int i = 1; i < numeroLetras; i++) {
                c.add(Calendar.MONTH, 1);
                if (c.getTime().getMonth() == 1) {
                    if (((c.getTime().getYear() + 1900) % 4 == 0) && (((c.getTime().getYear() + 1900) % 100 != 0) || ((c.getTime().getYear() + 1900) % 400 == 0))) {
                        fechaLetras.add("29/02/" + (c.getTime().getYear() + 1900));
                    } else {
                        fechaLetras.add("28/02/" + (c.getTime().getYear() + 1900));
                    }
                } else {
                    fechaLetras.add("30/" + (c.getTime().getMonth() < 9 ? ("0" + (c.getTime().getMonth() + 1)) : (c.getTime().getMonth() + 1)) + "/" + (c.getTime().getYear() + 1900));
                }
            }
        }
        if (fechaInicio.getDate() == 31) {  // retornaremos con 28, 30,31 segun sean los meses
            fechaLetras.add(formato.format(c.getTime()));
            for (int i = 1; i < numeroLetras; i++) {
                c.add(Calendar.MONTH, 1);
                if (c.getTime().getMonth() == 1) {
                    if (((c.getTime().getYear() + 1900) % 4 == 0) && (((c.getTime().getYear() + 1900) % 100 != 0) || ((c.getTime().getYear() + 1900) % 400 == 0))) {
                        fechaLetras.add("29/02/" + (c.getTime().getYear() + 1900));
                    } else {
                        fechaLetras.add("28/02/" + (c.getTime().getYear() + 1900));
                    }
                }
                if (c.getTime().getMonth() == 3 || c.getTime().getMonth() == 5
                        || c.getTime().getMonth() == 8 || c.getTime().getMonth() == 10) {
                    fechaLetras.add("30/" + (c.getTime().getMonth() < 9 ? ("0" + (c.getTime().getMonth() + 1)) : (c.getTime().getMonth() + 1)) + "/" + (c.getTime().getYear() + 1900));
                }
                if (c.getTime().getMonth() == 0 || c.getTime().getMonth() == 2
                        || c.getTime().getMonth() == 4 || c.getTime().getMonth() == 6
                        || c.getTime().getMonth() == 7 || c.getTime().getMonth() == 9
                        || c.getTime().getMonth() == 11) {
                    fechaLetras.add("31/" + (c.getTime().getMonth() < 9 ? ("0" + (c.getTime().getMonth() + 1)) : (c.getTime().getMonth() + 1)) + "/" + (c.getTime().getYear() + 1900));
                }
            }
        }
        return fechaLetras;
    }
__________________
consigue un trabajo que te guste y nunca mas volverás a trabajar...
  #3 (permalink)  
Antiguo 10/04/2013, 16:57
Avatar de henrri  
Fecha de Ingreso: enero-2011
Mensajes: 40
Antigüedad: 13 años, 3 meses
Puntos: 3
Respuesta: Sumar un mes en java

Cita:
Iniciado por henrri Ver Mensaje
pude darle solución y pongo el código para que alguien los use algún día.
Código:
    // <editor-fold defaultstate="collapsed" desc="Haga clic en el signo + para mostrar descripción">
    /**
     * Genera las fechas de letras
     *
     * @param fechaInicio
     * @param numeroLetras
     * @return array con las fechas programdas para el pago
     */
    // </editor-fold>
    public List generarFechaLetrasMensuales(Date fechaInicio, int numeroLetras) {
        List fechaLetras = new ArrayList<Object>();
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");  //tipo de formato de salida
        Calendar c = Calendar.getInstance();
        c.set(fechaInicio.getYear() + 1900, fechaInicio.getMonth(), fechaInicio.getDate()); //seteamos la fecha de inicio
        if (fechaInicio.getDate() < 29) {   //si la fecha es menor a 29 retornamos el mismo mes siempre.
            fechaLetras.add(formato.format(c.getTime()));
            for (int i = 1; i < numeroLetras; i++) {
                c.add(Calendar.MONTH, 1);
                fechaLetras.add(formato.format(c.getTime()));
            }
            return fechaLetras;
        }
        if (fechaInicio.getDate() == 29) {  //para el caso de fecha 29 retornaremos los meses de febrero con fecha 28
            fechaLetras.add(formato.format(c.getTime()));
            for (int i = 1; i < numeroLetras; i++) {
                c.add(Calendar.MONTH, 1);
                if (c.getTime().getMonth() == 1) {
                    if (((c.getTime().getYear() + 1900) % 4 == 0) && (((c.getTime().getYear() + 1900) % 100 != 0) || ((c.getTime().getYear() + 1900) % 400 == 0))) {
                        fechaLetras.add("29/02/" + (c.getTime().getYear() + 1900));
                    } else {
                        fechaLetras.add("28/02/" + (c.getTime().getYear() + 1900));
                    }
                } else {
                    fechaLetras.add("29/" + (c.getTime().getMonth() < 9 ? ("0" + (c.getTime().getMonth() + 1)) : (c.getTime().getMonth() + 1)) + "/" + (c.getTime().getYear() + 1900));
                }
            }
        }
        if (fechaInicio.getDate() == 30) {  //retornareos el mes de febrero con fecha 28
            fechaLetras.add(formato.format(c.getTime()));
            for (int i = 1; i < numeroLetras; i++) {
                c.add(Calendar.MONTH, 1);
                if (c.getTime().getMonth() == 1) {
                    if (((c.getTime().getYear() + 1900) % 4 == 0) && (((c.getTime().getYear() + 1900) % 100 != 0) || ((c.getTime().getYear() + 1900) % 400 == 0))) {
                        fechaLetras.add("29/02/" + (c.getTime().getYear() + 1900));
                    } else {
                        fechaLetras.add("28/02/" + (c.getTime().getYear() + 1900));
                    }
                } else {
                    fechaLetras.add("30/" + (c.getTime().getMonth() < 9 ? ("0" + (c.getTime().getMonth() + 1)) : (c.getTime().getMonth() + 1)) + "/" + (c.getTime().getYear() + 1900));
                }
            }
        }
        if (fechaInicio.getDate() == 31) {  // retornaremos con 28, 30,31 segun sean los meses
            fechaLetras.add(formato.format(c.getTime()));
            for (int i = 1; i < numeroLetras; i++) {
                c.add(Calendar.MONTH, 1);
                if (c.getTime().getMonth() == 1) {
                    if (((c.getTime().getYear() + 1900) % 4 == 0) && (((c.getTime().getYear() + 1900) % 100 != 0) || ((c.getTime().getYear() + 1900) % 400 == 0))) {
                        fechaLetras.add("29/02/" + (c.getTime().getYear() + 1900));
                    } else {
                        fechaLetras.add("28/02/" + (c.getTime().getYear() + 1900));
                    }
                }
                if (c.getTime().getMonth() == 3 || c.getTime().getMonth() == 5
                        || c.getTime().getMonth() == 8 || c.getTime().getMonth() == 10) {
                    fechaLetras.add("30/" + (c.getTime().getMonth() < 9 ? ("0" + (c.getTime().getMonth() + 1)) : (c.getTime().getMonth() + 1)) + "/" + (c.getTime().getYear() + 1900));
                }
                if (c.getTime().getMonth() == 0 || c.getTime().getMonth() == 2
                        || c.getTime().getMonth() == 4 || c.getTime().getMonth() == 6
                        || c.getTime().getMonth() == 7 || c.getTime().getMonth() == 9
                        || c.getTime().getMonth() == 11) {
                    fechaLetras.add("31/" + (c.getTime().getMonth() < 9 ? ("0" + (c.getTime().getMonth() + 1)) : (c.getTime().getMonth() + 1)) + "/" + (c.getTime().getYear() + 1900));
                }
            }
        }
        return fechaLetras;
    }
tarde fue mi reaacion...

Código:
    public List generarFechaLetrasMensuales(Date fechaInicio, int numeroLetras) {
        List fechaLetras = new ArrayList<Object>();
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");  //tipo de formato de salida
        Calendar c = Calendar.getInstance();
        for(int i=0;i<numeroLetras;i++){
            c.set(fechaInicio.getYear() + 1900, fechaInicio.getMonth(), fechaInicio.getDate()); //seteamos la fecha de inicio
            c.add(Calendar.MONTH, i);
            fechaLetras.add(formato.format(c.getTime()));
        }
        return fechaLetras;
    }
__________________
consigue un trabajo que te guste y nunca mas volverás a trabajar...
  #4 (permalink)  
Antiguo 11/04/2013, 04:35
 
Fecha de Ingreso: febrero-2011
Mensajes: 672
Antigüedad: 13 años, 2 meses
Puntos: 78
Respuesta: Sumar un mes en java

Si coges la instancia del calendario gregoriano estarás usando el calendario "normal" y no tendrás que ir sumando 1 a los meses.

Saludos.

Etiquetas: Ninguno
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 06:00.