2011-02-26 15 views
8

Duplicar posibles:
How can I increment a date by one day in Java?Incremento fecha existente por 1 día

tengo un objeto fecha existente que me gustaría incrementar en un día, manteniendo todos los demás campos de la misma . Cada ejemplo que he encontrado arroja horas/minutos/segundos o tienes que crear un nuevo objeto de fecha y transferir los campos. ¿Hay alguna manera de avanzar el campo del día en 1?

Gracias

Edit: Lo siento No pretendía incrementar el valor del día por uno, me refería a avanzar el día en adelante por 1

+0

No. La única forma es añadir 1 día a la fecha. La razón: supongamos que incrementa el campo de fecha del 31 de mayo en 1. ¿Eso lo haría el 32 de mayo? Mientras que si agrega 1 día, Java se encarga de eso. – Soumya

+1

Algo como 'date.setTime (date.getTime() + 24 * 60 * 60 * 1000)' es una solución simple y sucia. – maaartinus

+0

sin una zona horaria especificada no hay una fecha actual. – bestsss

Respuesta

23
Calendar c = Calendar.getInstance(); 
c.setTime(yourdate); 
c.add(Calendar.DATE, 1); 
Date newDate = c.getTime(); 
+1

Una solución realmente agradable. ¿Pero también funciona con la fecha 31 del mes de enero? entonces, ¿qué pasó? –

+4

¿De verdad? ¡¿Se necesitan 4 líneas de código para incrementar la fecha ?! Eso es tonto. –

5

El objeto Date sí (suponiendo que decir java.util.Date) no tiene Día campo, solo un valor de "milisegundos desde Unix Epoch". (. Las impresiones toString() método esta en función de la localización actual)

Dependiendo de lo que quiere hacer, existen en principio dos maneras:

  • Si desea simplemente "exactamente 24 horas después de lo dado fecha ", simplemente podría agregar 1000 * 60 * 60 * 24 milisegundos al valor de tiempo, y luego configurar esto. Si hay un cambio de horario de verano entre, podría ser que su fecha anterior fuera a las 11:07 y la nueva a las 10:07 o 12:07 (dependiendo de la dirección del cambio), pero todavía es exactamente 24 diferencia horaria

    private final static long MILLISECONDS_PER_DAY = 1000L * 60 * 60 * 24; 
    
    /** 
    * shift the given Date by exactly 24 hours. 
    */ 
    public static void shiftDate(Date d) { 
        long time = d.getTime(); 
        time += MILLISECONDS_PER_DAY; 
        d.setTime(time); 
    } 
    
  • Si usted quiere tener "el mismo tiempo en el día calendario siguiente", es mejor utilizar un calendario, como mostró MeBigFatGuy. (Tal vez usted quiere dar a este método getInstance() la zona horaria, también, si usted no quiere que su zona horaria local que se utilizará.)

    /** 
    * Shifts the given Date to the same time at the next day. 
    * This uses the current time zone. 
    */ 
    public static void shiftDate(Date d) { 
        Calendar c = Calendar.getInstance(); 
        c.setTime(d); 
        c.add(Calendar.DATE, 1); 
        d.setTime(c.getTimeInMillis()); 
    } 
    

    Si usted está haciendo múltiples tales manipulaciones fecha, un mejor uso directamente un calendario objeto en lugar de convertir desde y hasta Fecha una y otra vez.

4
org.apache.commons.lang.time.DateUtils.addDays(date, 1);