得到一个long的值 - 一个long并将该值存储为int?

时间:2012-07-27 23:25:21

标签: java

我使用System.currentTimeMillis()来获取多个值,然后我从另一个中减去一个以获得两个值之间的差异,然后在Robot类的delay()方法中使用该值。我需要这个值作为整数,因为这是延迟方法将采取的。任何人的想法?

3 个答案:

答案 0 :(得分:7)

如果long值适合int,那么您可以像这样简单地转换值:

int someInt = (int) someLong;

(或直接作为amethod的参数:robot.someMethod((int) someLong);

请注意,int可以存储最大值2147483647(和2147483647ms≈24.9天)的值。

答案 1 :(得分:1)

正如其他答案和评论所说,如果您不关心可能的溢出,那么简单的类型转换就可以了。您可能不需要需要来关注,因为2147483647毫秒在用户界面条件中很长时间

但如果你确实需要担心,那么这将更加强大:

long time1 = System.currentTimeMillis();
...
long time2 = System.currentTimeMillis();
...
long diff = time2 - time1;
if (diff >= Integer.MIN_VALUE && diff <= Integer.MAX_VALUE) {
    delay((int) diff);
} else {
    throw new SomeException("Delays > 2147483647 milliseconds not supported");
}

还存在(理论上)问题,在将来的某个时间,自1970年1月1日以来的毫秒数将不再适合64位有符号整数。但这不会发生在几十亿年 - http://en.wikipedia.org/wiki/Year_2038_problem

答案 2 :(得分:0)

AS aioobe说

一个简单的类型转换应该起作用,因为你确定该值实际上总是适合int。

int delay_amt = (int)delay_amt_long

如果没有那么你将不得不做一些额外的处理,例如多次调用delay()函数说n + 1次

其中n = delay_amt_long / max_int_size且m = delay_amt_long%max_int_size

其中第(p + 1)次迭代的延迟时间为m,因此:

delay_amt_long = n*max_int_size + m

或者你可以使用其他方法来专门检测和处理溢出。