我System.currentTimeMillis()
用来获取多个值,然后我从另一个中减去一个以获得两个值之间的差异,然后在 Robot 类的delay()
方法中使用该值。我需要这个值作为一个整数,因为这是延迟方法将采用的。有什么想法吗?
3 回答
如果该long
值适合int
,那么您可以像这样简单地转换该值:
int someInt = (int) someLong;
(或者,直接作为 amethod 的参数robot.someMethod((int) someLong);
:)
请注意,anint
最多可以存储 2147483647(和 2147483647 ms ≈ 24.9 天)的值。
正如其他答案和评论所说,如果您不关心可能的溢出,一个简单的类型转换就可以工作。而且您可能不需要关心,因为在用户界面方面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
作为 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
或者,您可以使用其他方法来专门检测和处理溢出。