2010-08-10 11 views
10

Kalendarza w Javie bierze całkowitą jako wejścieJak dodać długą wartość do kalendarza? metoda add

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

Ale co, jeśli są długie sekundy typ.

long secs = 3

Jest sporo możliwości, takie jak dodanie sekund iteracyjny, ale jakie są inne opcje?

+1

wow, 10 minut później, Bang, 4 odpowiedzi. Dzięki! – Strudel

Odpowiedz

15

Jeżeli wartość zapisana w long sec jest mniejsza lub równa następnie Integer.MAX_VALUE można oddać do int:

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

Jeśli wartość jest mniejsza lub równa Long.MAX_VALUE/1000 potem można przekonwertować sekund milisekund i użyć innego podejścia :

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

Ustawiam maksymalną dopuszczalną datę na "Long.MAX_VALUE/1000", co jest więcej niż wystarczające i użyłem cal.setTimeInMillis (cal.getTimeInMillis() + (sec * 1000)); – Strudel

7

Jeśli długa wartość sekund nie jest zbyt duża, aby zmieścić się w liczbie całkowitej, obsadź obsada.

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

Ale gorąco radzę używać joda time zamiast API kalendarzowego java.

+5

+1 dla czasu joda. – InsertNickHere

1

Przekształć sekundy na, na przykład, dni, dzieląc przez 86400, a następnie dodaj dni i pozostałe sekundy. Będziesz musiał to elegancko, ponieważ nawet po podzieleniu przez 86400 wynik może być większy niż int.

Innym sposobem jest zamiana kalendarza na milisekundy za pomocą metody getMillisOf(), dodanie żądanej wartości, a następnie ustawienie za pomocą metody setTimeInMillis(). Jest to prostsze i przy bardzo niewielkim ryzyku popełnienia błędu, pamiętaj, aby przekonwertować sekundy na milisekundy.

0

Afaik kalendarz zapisuje wartości jako ints wewnętrznie, więc nie ma sposobu na długie włożenie. Popraw mnie, jeśli jestem zły, ale to właśnie przeczytałem z Java calendar. Powinieneś przekonwertować swoje sekundy na kilka dni, aby uzyskać to, co chcesz.

0

jeśli liczba jest duża, jedna idea jest taka, że ​​robisz to w TOW time Dodaj()

MaxInt: 2147483647 
MaxLong: 9223372036854775807 

zatem

cal.add(Calendar.SECOND, secs/1000000000); 
cal.add(Calendar.SECOND, secs % 1000000000); 
Powiązane problemy