2010-08-10 10 views
10

de Calendario en Java toma un entero como una entrada¿Cómo agregar un valor largo al calendario? método add

 
int secs = 3; 
cal.add(Calendar.SECOND, secs); 

Pero lo que si los segundos son tipo Long.

long secs = 3

Hay bastantes posibilidades como la adición de los segundos iterativa, pero ¿cuáles son las otras opciones?

+1

Wow, 10 minutos más tarde, explosión, 4 respuestas. ¡Gracias! – Strudel

Respuesta

15

Si el valor almacenado en long sec es menor o igual a continuación Integer.MAX_VALUE puede convertir a int:

cal.add(Calendar.SECOND, (int) sec)); 

Si el valor es menor o igual Long.MAX_VALUE/1000 entonces usted puede convertir los segundos a milisegundos y utilizar un enfoque diferente :

cal.setTimeInMillis(cal.getTimeInMillis() + (sec*1000)); 
+0

Establecí la fecha máxima permitida para que sea 'Long.MAX_VALUE/1000', que es más que suficiente y usé cal.setTimeInMillis (cal.getTimeInMillis() + (sec * 1000)); – Strudel

7

Si el valor largo de los segundos no es demasiado grande para caber en un entero, molde.

long secs = 3; 
cal.add(Calendar.SECOND, (int) secs); 

Pero yo le aconsejaría encarecidamente que utilice joda time lugar de la API Java calendario.

+5

+1 para el tiempo joda. – InsertNickHere

1

Convierta los segundos a, por ejemplo, días dividiendo por 86400, luego agregue días y los segundos restantes. Tendrá que hacerlo inteligentemente, ya que incluso después de dividir por 86400, el resultado puede ser mayor que un int.

Otra forma es convertir el calendario en milisegundos con getMillisOf(), agregue el valor que desee y luego ajústelo con setTimeInMillis(). Esto es más simple y con muy poco riesgo de cometer un error, solo recuerda convertir tus segundos en milisegundos.

0

Afaik el calendario almacena los valores como ints internamente, por lo que no hay forma de insertar un largo en él. Corrígeme si estoy equivocado, pero eso es lo que leí de Java calendar. Deberías convertir tus segundos a días para obtener lo que deseas.

0

si su número es grande, una idea es que lo hace en el remolque TIEMPO add()

MaxInt: 2147483647 
MaxLong: 9223372036854775807 

por lo tanto

cal.add(Calendar.SECOND, secs/1000000000); 
cal.add(Calendar.SECOND, secs % 1000000000); 
Cuestiones relacionadas