我使用System.currentTimeMillis()获取自纪元以来的秒数。 这是一个例子。
long enable_beacon_timestamp = System.currentTimeMillis()/1000;
println(enable_beacon_timestamp);
println(int(enable_beacon_timestamp));
enable_beacon(int(enable_beacon_timestamp));
输出结果为:
>>1424876956
>>1424876928
所以问题在于施法价值不匹配。我想要的是让第一个输出与整数相同。
你能提供一些背景知识吗?
答案 0 :(得分:1)
您的演员语法不正确。您还需要注意,long
可能比int
的最大值大得多。
int y;
if ( enable_beacon_timestamp > (long)Integer.MAX_VALUE ) {
// long is too big to convert, throw an exception or something useful
}
else {
y = (int)enable_beacon_timestamp;
}
尝试类似这样的事情......
答案 1 :(得分:0)
你可以写一些诸如
之类的东西try{
int castedValue = ( enable_beacon_timestamp < (long)Integer.MAX_VALUE )?(int)enable_beacon_timestamp : -1;
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
答案 2 :(得分:0)
TimeUnit#convert
。Math.toIntExact
,如果值溢出 int
,它会抛出异常。演示:
import java.util.concurrent.TimeUnit;
public class Main {
public static void main(String[] args) {
long seconds = TimeUnit.SECONDS.convert(System.currentTimeMillis(), TimeUnit.MILLISECONDS);
System.out.println(seconds);
try {
int secondInt = Math.toIntExact(seconds);
System.out.println(secondInt);
// ...
} catch (ArithmeticException e) {
System.out.println("Encountered error while casting.");
}
}
}
输出:
1621358400
1621358400