[英]Converting long to int in Java
我正在使用 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
所以問題是演員價值不匹配。 我想要的是使第一個輸出與整數相同。
你能提供一些背景為什么會發生這種情況嗎?
您的強制轉換語法不正確。 您還需要注意long
s 可能比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;
}
嘗試這樣的事情也許......
你可以寫一些東西,比如
try{
int castedValue = ( enable_beacon_timestamp < (long)Integer.MAX_VALUE )?(int)enable_beacon_timestamp : -1;
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.