2010-03-23 26 views
48

Sé que add() agrega la cantidad de tiempo especificada (firmada) al campo de tiempo dado, según las reglas del calendario.Calendario add() vs roll() ¿cuándo lo usamos?

Y roll() agrega la unidad de tiempo única (firmada) especificada en el campo de tiempo dado sin cambiar los campos más grandes.

No puedo pensar en un uso diario de roll() Haría todo por add().

¿Puede ayudarme con ejemplos cuando usamos roll() y cuando add()?

EDIT 1

Joda respuestas no son aceptados!

Respuesta

48
  • add() - casi siempre, como usted ha dicho
  • roll() - por ejemplo, se quiere "prescindir" eventos en un mes. El algoritmo puede proceder varios días y colocar el evento, luego continuar. Cuando se llega al final del mes, debe comenzar desde el principio. Por lo tanto, roll().
24

encontrados en jGuru

  • Calendar.roll()
    cambio a una unidad específica y deja 'más grande' (en términos de tiempo-meses es 'más grande' de día) unidades sin alterar. El ejemplo de la API es que dado una fecha de 31 de agosto de 1999, por rodadura (Calendar.MONTH, 8) produce 30 de abril de 1999. Es decir, el día era cambiar para satisfacer el máximo de abril, pero el 'más grande 'unidad, AÑO, fue sin cambios.

roll(): Rolls up 8 months here i.e., adding 8 months to Aug will result in Apr but year remains unchanged(untouched).

  • Calendar.add()
    provocará que la siguiente unidad de 'grande' para cambiar, si es necesario . Es decir, dada una fecha de 31 de agosto de 1999, agregue (Calendar.MONTH, 8) cede 30 de abril de 2000. add() también obliga a un recálculo de milisegundos y todos los campos.

add(): Adds months to the current date i.e., adding 8 months to Aug will give Apr of Next Year, hence forces the Year change.

6

sólo estaba preguntando la misma pregunta (que es lo que encontré esta página) y alguien en mi lugar de trabajo (bien hecho, DCK) se le ocurrió una sugerencia:

Los selectores de fecha en muchos teléfonos inteligentes (y otras interfaces similares) "pasarán" el día entre el 31 y el 1. ° sin alterar el mes, de forma similar para el campo del mes.

No puedo pensar en otro uso de cajero automático y este podría implementarse de otras maneras, ¡pero al menos es un ejemplo!

Tim

2

Aquí hay un ejemplo que no funcionará. La condición en el ciclo nunca se cumplirá, porque la tirada, una vez que llegue al 31 de enero de 2014, se remontará al 1 de enero de 2014.

Calendar start=new GregorianCalendar(); 
    start.set(Calendar.YEAR, 2014); 
    start.set(Calendar.MONTH, 0); 
    start.set(Calendar.DAY_OF_MONTH, 1); 
    //January 2, 2014 

    Calendar end=new GregorianCalendar(); 
    end.set(Calendar.YEAR, 2014); 
    end.set(Calendar.MONTH, 1); 
    end.set(Calendar.DAY_OF_MONTH, 2); 
    //February 2, 2014 

    while (start.getTime().before(end.getTime())){ 
     start.roll(Calendar.DATE, 1); 
    }