我使用System.currentTimeMillis()
来获取多个值,然后我从另一个中减去一个以获得两个值之间的差异,然后在Robot类的delay()
方法中使用该值。我需要这个值作为整数,因为这是延迟方法将采取的。任何人的想法?
答案 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
或者你可以使用其他方法来专门检测和处理溢出。