2010-08-10 13 views
10

di calendario in Java prende un intero come inputCome aggiungere un valore lungo al calendario? metodo add

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

Ma cosa succede se i secondi sono di tipo Long.

long secs = 3

C'è un bel paio di possibilità, come l'aggiunta dei secondi iterativo, ma quali sono le altre opzioni?

+1

Wow, 10 minuti più tardi, bang, 4 risposte. Grazie! – Strudel

risposta

15

Se il valore memorizzato in long sec è minore o uguale allora Integer.MAX_VALUE si può lanciare a int:

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

Se il valore è inferiore o uguale Long.MAX_VALUE/1000 allora è possibile convertire i secondi in millisecondi e utilizzare un approccio diverso :

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

Ho impostato la data massima consentita come 'Long.MAX_VALUE/1000' che è più che sufficiente e utilizzata cal.setTimeInMillis (cal.getTimeInMillis() + (sec * 1000)); – Strudel

7

Se il valore lungo dei secondi non è troppo grande per rientrare in un numero intero, cast.

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

Ma vi consiglio caldamente di utilizzare joda time posto dell'API di calendario di Java.

+5

+1 per tempo joda. – InsertNickHere

1

Convertire i secondi per, ad esempio, giorni dividendo per 86400, quindi aggiungere giorni e i secondi rimanenti. Dovrai farlo in modo intelligente, poiché anche dopo aver diviso per 86400 il risultato potrebbe essere maggiore di un int.

Un altro modo è convertire il calendario in millisecondi con getMillisOf(), aggiungere il valore desiderato e impostarlo con setTimeInMillis(). Questo è più semplice e con il minimo rischio di sbagliare, ricordati di convertire i tuoi secondi in millisecondi.

0

Dopo il calendario, i valori vengono memorizzati internamente, quindi non è possibile inserirli a lungo. Correggimi se sbaglio, ma è quello che ho letto su Java calendar. Dovresti convertire i tuoi secondi in giorni o giù di lì per ottenere quello che vuoi.

0

se il vostro numero è grande, una sola idea è che lo si fa in TOW TEMPO add()

MaxInt: 2147483647 
MaxLong: 9223372036854775807 

quindi

cal.add(Calendar.SECOND, secs/1000000000); 
cal.add(Calendar.SECOND, secs % 1000000000); 
Problemi correlati