2010-08-10 33 views
10

日历的add方法需要一个整数作为输入如何将长值添加到日历?在Java中

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

但如果秒长型的。

long secs = 3

有相当喜欢加入秒迭代几种可能性,但什么其他选择?

+1

哇,10分钟后,一鼓作气,4个答案。谢谢! – Strudel 2010-08-10 07:25:09

回答

15

如果存储在long sec值小于或等于则Integer.MAX_VALUE可以转换为int

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

如果该值小于或等于Long.MAX_VALUE/1000那么你就可以秒转换为毫秒,使用不同的方法:

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

我将允许的最大日期设置为'Long.MAX_VALUE/1000',这已经足够并且使用了cal.setTimeInMillis(cal.getTimeInMillis()+(sec * 1000)); – Strudel 2010-08-10 11:14:25

7

如果秒的长整型值不是太大而不适合整数,则可以使用转换成

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

但我强烈建议你使用joda time,而不是Java日历API。

+5

乔达时间+1。 – InsertNickHere 2010-08-10 07:14:15

1

将秒数转换为例如天数除以86400,然后添加天数和剩余秒数。你需要巧妙地做到这一点,因为即使除以86400后,结果可能会比int大。

另一种方法是使用getMillisOf()将日历转换为毫秒,然后添加所需的值,然后使用setTimeInMillis()进行设置。这很简单,几乎没有犯错的风险,只要记住将秒转换为毫秒。

0

Afaik日历将内部值存储为整数,因此无法长时间存储。纠正我,如果我错了,但这是我读出Java calendar。你应该把你的秒数转换成几天以获得你想要的。

0

如果您的号码是大, 一个想法是,你在拖时添加这样做()

MaxInt: 2147483647 
MaxLong: 9223372036854775807 

因此

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