2012-08-09 7 views
11

Supongamos que actualmente la fecha es 28 de mayo. Si llamo a los siguientes comandos para que la salida se convierta enAgregar un día a un calendario en Android falla en 31st

cal.add(Calendar.DATE, 1); // Day = 29 
cal.add(Calendar.DATE, 1); // Day = 30 
cal.add(Calendar.DATE, 1); // Day = 31 
cal.add(Calendar.DATE, 1); // Day = 31 
cal.add(Calendar.DATE, -1); // Day = 29 

Por qué esto no va a saltar en el próximo mes. Y por qué se quedó en el 31. (pero realmente cuando usted menos uno salta a 29.

Respuesta

13

Cuando agrega 1 al campo Calendario.DATE, también debería incrementar el mes cuando se alcanza el final del mes (31 en el caso de mayo) para que que escribió no tiene sentido depurarlo y asegúrese de que el valor del día es de hecho lo que creo que es

0

he comprobado, que añade éxito Consulta mi código y O/P:..

Calendar cal = Calendar.getInstance(); // today is 09-Aug-2012 

for(int i=0;i<23;i++) { 
    cal.add(Calendar.DATE, 1); 
} 
System.out.println(cal.get(Calendar.DAY_OF_MONTH)); 

O/p

1

3

¡Parece que estoy equivocado! de acuerdo con la api, roll solo actualiza el campo spezific!

si se agrega un día a tratar Calendario

cal.roll(Calendar.DATE, 1); 

esto incrementará mes y año en sobrevolado

+1

rollo sólo "rollos" el campo se está cambiando y no cambia los campos más grandes – IncrediApp

+0

http://docs.oracle.com/ javase/1.4.2/docs/api/java/util/Calendar.html # roll (int, int) – IncrediApp

+1

@IncrediApp parece estar en lo cierto, la explicación en rollo sugiere en sentido contrario en primer lugar _ "Incrementar o disminuir el especificado campo y ajustar el valor del campo cuando va más allá del valor máximo o mínimo para la fecha actual. Otros campos se ajustarán según sea necesario para mantener una fecha coherente."_ – Kostronor

1

Qué aplicación del calendario está usando? Porque parece funcionar para todos los demás ...

0

No es una respuesta, solo una pista: descubrí que sucede cuando el horario de verano comienza entre las fechas. Tal vez sea su caso ...

Por ejemplo: brasileño DST comenzó este año en "dom 20 Oct 2013 00:00:00"

Calendar cal = Calendar.getInstance(); // today = Sat Oct 19 00:00:00 BRT 2013 
cal.add(Calendar.DATE, 1); // = Sat Oct 19 23:00:00 BRT 2013 

Por desgracia, todavía no sé cómo solución que .

21

Puede hacerlo fácilmente de dos maneras sencillas, amigo mío. El primero es:

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.DAY_OF_MONTH, 1); 

y la segunda es:

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.HOUR_OF_DAY, 24); 

Creo que le gustaría encontrar esta cosa. Gracias.

0

Esto también debería hacer el truco.

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.DAY_OF_YEAR, 1); 

Se puede probar que funciona con:

for (int i = 0; i < 365; i++) { 
    cal.add(Calendar.DAY_OF_YEAR, 1); 
    System.out.println(cal.getTime().toString()); 
} 
Cuestiones relacionadas