Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为日历添加长值?_Java_Date_Calendar_Long Integer - Fatal编程技术网

Java 如何为日历添加长值?

Java 如何为日历添加长值?,java,date,calendar,long-integer,Java,Date,Calendar,Long Integer,Java中Calendar的add方法将整数作为输入 int secs = 3; cal.add(Calendar.SECOND, secs); int secs=3; 计算添加(日历秒,秒); 但是如果秒是长型的呢 long secs=3 有相当多的可能性,比如添加秒数,但是还有什么其他选项呢?如果秒数的长值不是太大,无法放入整数,cast long secs = 3; cal.add(Calendar.SECOND, (int) secs); 但是我强烈建议您使用而不是java日历API。

Java中Calendar的add方法将整数作为输入

int secs = 3; cal.add(Calendar.SECOND, secs); int secs=3; 计算添加(日历秒,秒); 但是如果秒是长型的呢

long secs=3


有相当多的可能性,比如添加秒数,但是还有什么其他选项呢?

如果秒数的长值不是太大,无法放入整数,cast

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

但是我强烈建议您使用而不是java日历API。

将秒转换为天,例如除以86400,然后加上天和剩余的秒。您需要巧妙地对此进行调整,因为即使除以86400,结果也可能大于整数


另一种方法是使用getMillisOf()将日历转换为毫秒,添加所需的值,然后使用setTimeInMillis()进行设置。这更简单,而且出错的风险也很小,只要记住将秒数转换为毫秒。

Afaik日历在内部将值存储为int,因此无法将长时间放入其中。如果我错了,请纠正我,但这是我读出来的。你应该把你的秒转换成天左右,以得到你想要的

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

cal.add(Calendar.SECOND, (int) sec));
如果该值小于或等于
Long.MAX_value/1000
,则可以将秒数转换为毫秒,并使用不同的方法:

cal.setTimeInMillis(cal.getTimeInMillis() + (sec*1000));
如果你的数字很大, 一个想法是,您可以在两次添加()中完成

所以

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

哇,10分钟后,砰,4个答案。谢谢我将允许的最大日期设置为'Long.MAX_VALUE/1000',这已经足够了,并且使用了cal.setTimeInMillis(cal.getTimeInMillis()+(sec*1000));
cal.add(Calendar.SECOND, secs / 1000000000);
cal.add(Calendar.SECOND, secs % 1000000000);